在Python中使用槽是否是个好主意?

3
使用 Python 中的 slots 技术,是一种好的 Pythonic 技巧,还是来自于 C 语言家族的习惯呢?据说它可以提高程序的性能,减少内存消耗,特别是在创建很多对象时。原则上,使用 slots 可能会成为日常例行公事,因为几乎总是可以知道类的哪些属性将会被用到。那么我应该什么时候使用 slots 呢?

3
仅在您认为需要创建大量对象时(读作:数十万个),才使用插槽。否则,它似乎完全没有必要。 - juanpa.arrivillaga
1
这里有一个相当全面的答案:https://dev59.com/_nRB5IYBdhLWcg3w6LR2#28059785 - JCOC611
1
如果你在疑惑是否应该使用插槽,那就不要使用它。如果你真的需要,你会知道的。 - wim
还有一些附加好处 - 您可以添加一个 __slots__ 字典来记录您的代码,而像 PyCharm 这样的 linters/IDEs 使用 __slots__ 来检查您的变量访问。 - c z
1个回答

3

这是'官方'答案: "slots 类内声明的一种方法,通过预先声明实例属性的空间并消除实例字典来节省内存。虽然很受欢迎,但这种技术有些棘手,并且最好保留在内存关键应用程序具有大量实例的罕见情况下使用。"

我认为CPython dict在3.6中的内部更改略微降低了__slots__的收益。


是的,增益已经降低了。引用《学习Python》一书中的内容:“在Python 3.3中,通过使用键共享字典模型,非插槽属性空间要求得到了减少,对象属性所使用的__dict__字典可以共享部分内部存储,包括其键的存储。这可能会减少__slots__作为优化工具的一些价值。” - MattSt

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接