为什么等价字符串的id之间有奇怪的行为?

2024-04-24 04:15:51 发布

您现在位置:Python中文网/ 问答频道 /正文

根据我的理解,如果一个不可变类型的变量被赋予一个与另一个相同不可变类型的变量相等的值,那么它们都应该引用同一个对象。我用的是python2.7.6,不知道这是不是一个bug。你知道吗

这就像我理解的那样:

x = 'ab'
y = 'ab'
id(x) == id(y)
True

但是,通过改变角色,这不会表现为:

x = 'a#'
y = 'a#'
id(x) == id(y)
False

奇怪的是,并行分配是非常不同的!你知道吗

x, y = 'a#','a#'
id(x) == id(y)
True

我不理解这种行为。你知道吗


Tags: 对象idfalsetrue角色类型abbug
1条回答
网友
1楼 · 发布于 2024-04-24 04:15:51

你说的是string interning。这是一种内部机制,无法保证两个不同的字符串会存储在内存中的同一位置。这不是一个错误,所以不要依赖这样的行为。这与C/C++中未定义的行为相同。你知道吗

You may be interested in this answer。你知道吗

虽然我可以在REPL中复制这个行为,但是如果我将代码放入一个文件中,然后用解释器运行它,比较结果总是返回true。你知道吗

顺便说一下,有一种方法可以保证对象是相同的:

>>> x = intern('a#')
>>> y = intern('a#')
>>> x is y
True

More details on the subject can be found in this blog post。你知道吗

相关问题 更多 >