根据我的理解,如果为不可变类型的变量赋值等于同一不可变类型的另一个变量,则它们都应该引用同一个对象.我使用的是Python 2.7.6,不知道这是不是一个bug.
这表现得像我如何理解:
x = 'ab'
y = 'ab'
id(x) == id(y)
True
Run Code Online (Sandbox Code Playgroud)
但是,通过更改字符,这不起作用:
x = 'a#'
y = 'a#'
id(x) == id(y)
False
Run Code Online (Sandbox Code Playgroud)
奇怪的是,并行分配是非常不同的!
x, y = 'a#','a#'
id(x) == id(y)
True
Run Code Online (Sandbox Code Playgroud)
我不明白这种行为.
你所说的是被称为字符串实习.这是一种内部机制,并不能保证两个不同的字符串将存储在内存中的相同位置.这不是一个bug,所以不要依赖这种行为.这与C/C++中的未定义行为属于同一类.
虽然我能够在REPL中复制这种行为,但如果我将代码放在一个文件中然后用解释器运行它,那么比较总是对我来说是真的.
顺便提一下,有一种方法可以保证对象是相同的:
>>> x = intern('a#')
>>> y = intern('a#')
>>> x is y
True
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
89 次 |
最近记录: |