在我看来,特定类的每个实例都有自己的字典。当存在大量相同结构的类对象时,这可能浪费大量空间。实际上是这种情况,还是底层机制更有效,只有在明确要求时才创建对象的字典。 我正在考虑一个应用程序,我可能有一个非常大的数字,可能有数百万的对象,我应该避免使用一个类,而是使用一个命名常量的序列作为索引?
答案 0 :(得分:1)
如果您想减少开销,您可以根据实际需要选择两个选项。
如果您需要类似于类的结构,那么您应该考虑使用__slots__
。这将避免__dict__
,但仍允许您拥有方法,属性等。您将无法动态添加属性(您仅限于__slots__
列出的属性)。
如果你只想要一个"存储"对于对象而言,不需要方法和类似物,您可以使用collections.namedtuple
。这些提供类似"类#34;与他们的物品接口,应该是非常节省空间。
例如,一个只有两个属性的类" lastname"和"名字"可以实现为:
class Person(object):
__slots__ = ['firstname', 'lastname']
def __init__(self, firstname, lastname):
self.firstname = firstname
self.lastname = lastname
def __repr__(self):
return '{self.__class__.__name__}({self.firstname!r}, {self.lastname!r})'.format(self=self)
>>> p = Person('Tom', 'Riddle')
>>> p
Person('Tom', 'Riddle')
>>> p.firstname
'Tom'
或作为namedtuple:
>>> from collections import namedtuple
>>> Person = namedtuple('Person', 'firstname, lastname')
>>> p = Person('Tom', 'Riddle')
>>> p
Person(firstname='Tom', lastname='Riddle')
>>> p.firstname
'Tom'
答案 1 :(得分:-1)
这取决于您要存储在每个对象中的数据,但在大多数情况下,列表应该这样做。