【发布时间】:2016-01-03 05:42:24
【问题描述】:
在 Python 中:
>>> a = "Hello"
>>> b = "Hello"
>>> id(a) == id(b)
True
为什么?这会在引用对象内存位置的复杂程序中产生问题吗?
【问题讨论】:
-
在 Python 中,您通常不会“引用内存位置” - 字符串是不可变的,因此 equal 字符串(相同的字符以相同的顺序)也可能是 identical (相同的确切对象)并不重要。当您在生产代码中依赖
str_a is str_b而您真正的意思是str_a == str_b时,问题就来了,因为虽然相同的字符串必然相等,但不能保证相反。 -
您看到的是字符串实习,stackoverflow.com/questions/28329498/…,您的示例将因
a = "$foo"和b = "$foo"而失败,cpython 将实习任何由任何字母、下划线和数字组成的字符串,所以因为$被使用的字符串不会被迭代,它绝对不是依赖的东西
标签: python