为什么"hello" is "hello"
会在Python中生成True
?
我阅读了下面的here
如果两个字符串文字相等,则它们已放入相同的内存位置。字符串是一个不可变的实体。不能造成任何伤害。
所以每个Python字符串在内存中只有一个位置?听起来很奇怪。这里发生了什么事?
发布于 2009-09-08 07:15:09
Python (如Java、C、C++、.NET)使用字符串池/互操作。解释器意识到"hello“和"hello”是一样的,所以它优化并使用内存中的相同位置。
另一个好东西:"hell" + "o" is "hello"
==> True
发布于 2009-09-08 09:19:59
所以每个
字符串在内存中只有一个位置?
不,只有解释器决定对其进行优化,这是一个基于策略的决定,该策略不是语言规范的一部分,并且在不同的CPython版本中可能会发生变化。
例如:在我的安装(2.6.2 Linux)上:
>>> 'X'*10 is 'X'*10
True
>>> 'X'*30 is 'X'*30
False
ints也是如此:
>>> 2**8 is 2**8
True
>>> 2**9 is 2**9
False
所以不要依赖'string‘就是'string':即使只是看看C实现,它也是不安全的。
发布于 2009-09-08 07:16:35
文字字符串可能是根据它们的散列或类似内容进行分组的。两个相同的文字字符串将存储在相同的内存中,任何引用都会引用该字符串。
Memory Code
-------
| myLine = "hello"
| /
|hello <
| \
| myLine = "hello"
-------
https://stackoverflow.com/questions/1392433
复制相似问题