【发布时间】:2020-02-16 07:09:44
【问题描述】:
for count in range(5):
str1 = 'a' * count
str2 = 'a' * count
print(id(str1) == id(str2))
Output:
True
True
False
False
False
为什么我们会得到 False,因为
str1 = 'aaa'
str2 = 'aaa'
print(id(str1) == id(str2)) # True
任何人解释一下这个 python 内存行为。
【问题讨论】:
-
为什么重要?如果要测试字符串是否相等,请使用
==运算符。这里发生的是某种可能特定于 CPython 的内存使用优化 -
谢谢,但是 CPython 正在做哪种类型的内存优化,知道吗?
-
我也很好奇这个问题。由于 str1 和 str2 是不同的字符串,它们不应该有不同的 ID 吗?还是因为它们指向同一个东西,所以它们具有相同的内存地址?
-
这也发生在不超过
256的整数中。可能是某种优化,没什么大不了的。
标签: python python-3.x cpython