Den*_*gan 56 python identity string-comparison object-comparison
为什么用Python "hello" is "hello"生成True?
我在这里阅读以下内容:
如果两个字符串文字相等,则它们被放在相同的内存位置.字符串是不可变的实体.不会造成伤害.
因此,每个Python字符串在内存中只有一个位置?听起来很奇怪.这里发生了什么?
car*_*arl 87
Python(如Java,C,C++,.NET)使用字符串池/实习.解释器意识到"hello"与"hello"相同,因此它优化并使用内存中的相同位置.
另一个好东西:"hell" + "o" is "hello"==>True
bob*_*nce 60
因此,每个Python字符串在内存中只有一个位置?
不,只有解释器决定进行优化,这是基于不属于语言规范的策略的决定,并且可能在不同的CPython版本中发生变化.
例如.在我的安装(2.6.2 Linux):
>>> 'X'*10 is 'X'*10
True
>>> 'X'*30 is 'X'*30
False
Run Code Online (Sandbox Code Playgroud)
对于ints同样如此:
>>> 2**8 is 2**8
True
>>> 2**9 is 2**9
False
Run Code Online (Sandbox Code Playgroud)
所以不要依赖'string'是'string':即使只是看C实现也不安全.
Qua*_*ion 13
文字字符串可能基于它们的哈希或类似的东西进行分组.两个相同的文字字符串将存储在同一个内存中,任何引用都会引用它.
Memory Code
-------
| myLine = "hello"
| /
|hello <
| \
| myLine = "hello"
-------
Run Code Online (Sandbox Code Playgroud)
该is运营商如果两个参数是相同的对象返回true.你的结果就是这个和引用的结果.
在字符串文字的情况下,这些是实习的,这意味着它们与已知的字符串进行比较.如果已知相同的字符串,则文字将获取该值,而不是替代值.因此,它们成为同一个对象,表达式是真实的.