还有就是一个可变的替代方案
collections.namedtuple-
recordclass。
它具有与API相同的API和内存占用量,
namedtuple并且支持分配(它也应该更快)。例如:
from recordclass import recordclassPoint = recordclass('Point', 'x y')>>> p = Point(1, 2)>>> pPoint(x=1, y=2)>>> print(p.x, p.y)1 2>>> p.x += 2; p.y += 3; print(p)Point(x=3, y=5)
对于python 3.6及更高版本
recordclass(从0.5开始)支持typehints:
from recordclass import recordclass, RecordClassclass Point(RecordClass): x: int y: int>>> Point.__annotations__{'x':int, 'y':int}>>> p = Point(1, 2)>>> pPoint(x=1, y=2)>>> print(p.x, p.y)1 2>>> p.x += 2; p.y += 3; print(p)Point(x=3, y=5)
有一个更完整的示例(还包括性能比较)。
由于0.9
recordclass库提供了另一个变体-
recordclass.structclass工厂功能。它可以产生类,这些类的实例比
__slots__基于实例的实例占用更少的内存。这对于具有属性值的实例非常重要,该属性值不打算具有参考周期。如果您需要创建数百万个实例,则可能有助于减少内存使用。这是一个说明性的例子。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)