Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/307.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 为什么等价字符串的ID之间存在奇怪的行为?_Python_Python 2.7 - Fatal编程技术网

Python 为什么等价字符串的ID之间存在奇怪的行为?

Python 为什么等价字符串的ID之间存在奇怪的行为?,python,python-2.7,Python,Python 2.7,根据我的理解,如果一个不可变类型的变量被赋值等于另一个相同不可变类型的变量,那么它们都应该引用同一个对象。我正在使用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 我不理解这种

根据我的理解,如果一个不可变类型的变量被赋值等于另一个相同不可变类型的变量,那么它们都应该引用同一个对象。我正在使用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

我不理解这种行为。

你所说的是众所周知的。这是一种内部机制,不能保证两个不同的字符串会存储在内存中的同一位置。这不是一个bug,所以不要依赖这种行为。这与C/C++中未定义的行为属于相同的一般类别

虽然我能够在REPL中复制此行为,但如果我将代码放入文件中,然后使用解释器运行它,则比较总是返回true

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

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

.

不能保证两个不同的字符串在内存中是同一个对象。有时Python决定对他们进行实习,有时则不然。这绝对不是一个bug。我不知道为什么它的行为和它一样。可能是