Es gibt da bei mir ein Verstaendnisproblem, bei dem mir eventuell jemand auf die Spruenge helfen kann.
Ich wollte folgende Frage klaeren: "Braucht ein Objekt aus einer Klasse, das mit einem Satz Methoden ausgestattet ist mehr Speicher, als ein Objekt ohne diese Methoden? Die Ueberlegung ist fuer den Overhead und der daraus resultierende Resourcenverbrauch.
Um das zu beantworten habe ich das Skript geschrieben, das ich unten eingefuegt habe. Erwartet habe ich, dass das Dictionary ohne Methoden kleiner ist, als das mit allem Klimbim. Entweder mit viel oder mit wenig Unterschied. Da in meiner Welt im Kopf jedes Objekt aus der Klasse Store1 und Store2 zueinander einen kleinen Groessenunterschied aufweist, der in der Summe der Objekte gut sichtbar sein sollte. Der Compiler entweder zu jedem Objekt den ganzen Kram dazumacht, oder merkt, dass er das gleiche Objekt erstellt und die Methoden nur ein mal fuer alle Objekte hinterlegt.
Es gibt aber gar keinen Unterschied (das Ergebnis ist auf das byte genau gleich) und das wundert mich sehr.
Meine Fragen sind nun:
Warum gibt es hier keinen Unterschied im Speicherverbrauch?
Habe ich einen Denkfehler gemacht und der Test ist Fehlerhaft?
Oder ist das logisch und kann nur so sein, ich verstehe es nur nicht?
Vielen Dank fuer die Muehe den langen Beitrag zu lesen und verstehen zu wollen.
Maschinenhans
Code: Alles auswählen
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import sys
class Store1(object):
'''Testklasse' 1''
def __init__(self, x, y, z, x1, y1, z1):
self.x, y, z, x1, y1, z1 = x, y, z, x1, y1, z1
def getx(self):
return self.x
def gety(self):
return self.y
def getz(self):
return self.z
def getx1(self):
return self.x1
def gety1(self):
return self.y1
def getz1(self):
return self.z1
def setx(self, x):
self.x = x
def sety(self, y):
self.y = y
def setz(self, z):
self.z = z
def setx1(self, x):
self.x1 = x
def sety1(self, y):
self.y1 = y
def setz1(self, z):
self.z1 = z
class Store2(object):
'''Testklasse 2'''
def __init__(self, x, y, z, x1, y1, z1):
self.x, y, z, x1, y1, z1 = x, y, z, x1, y1, z1
def main():
classes1 = {}
classes2 = {}
for i in range(10000):
classes1[i] = Store1(1,2,3,4,5,6)
classes2[i] = Store2(1,2,3,4,5,6)
print('Groesse 1: {}'.format(sys.getsizeof(classes1)))
print('Groesse 2: {}'.format(sys.getsizeof(classes2)))
if __name__ == '__main__':
main()