gpt4 book ai didi

python - Python Empty Immutables 是单例吗?

转载 作者:太空狗 更新时间:2023-10-29 20:54:02 25 4
gpt4 key购买 nike

Python Empty Immutables 是单例吗?

如果您查看内置类型的 CPython 实现,您会发现所有不可变内置对象的注释都说它们的空版本是单例。这很有意义,因为 Python 可以避免在永远不会改变的冗余项目上浪费内存。

Here, specifically, is the source for 2.6 that references frozensets.它声明为评论:

/* The empty frozenset is a singleton */

我在 CPython 2.5 中也发现了同样的评论。我认为除了引用文档之外还引用源代码是有意义的,因为 CPython 是 Python 的引用实现。

我使用的是 Python 2.6.5,我在解释器中得到以下结果:

>>> g = frozenset()
>>> f = frozenset('a') - frozenset('a')
>>> f
frozenset([])
>>> f is g
False
>>> id(f)
279262312
>>> id(g)
114734544

这是否意味着评论有误?这是 2.6.5 中的错误吗?这在更高版本的 Python 中是否得到保证?如果是这样,我在文档中找不到对它的引用。

我问这个是因为我需要一个与 (None, '') 中的成员资格相同的支票,但原因是另一回​​事。

这就是为什么最好的做法是使用 is 检查 None,并使用 == 或 Python 的空语义错误与其他类型相关的控制流类型?

总结:

是否保证 Python 的空不可变对象(immutable对象)是单例?

最佳答案

description of standard types不 promise 等效对象是相同的,除了 TrueFalseNoneNotImplemented省略号。它做出的一些 promise 是() is ()1 is 1'hello' is “你好”。 (事实上​​,文档在 3.1 的最后一段中明确拒绝要求 1 is 1。)

不,不保证 Python 的空不可变容器是单例*。唯一保证的单例是 TrueFalseNoneNotImplementedEllipsis .



* 注意:本文中的“ singleton”一词的使用不同于其普遍接受的含义。在这篇文章中,单例意味着只能由一个对象持有的值;因此,包含该值的每个对象都是相同的。

关于python - Python Empty Immutables 是单例吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25273194/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com