【发布时间】:2016-02-18 09:42:37
【问题描述】:
x1 = 5
y1 = 5
x2 = 'Hello'
y2 = 'Hello'
x3 = [1,2,3]
y3 = [1,2,3]
print(x1 is y1)
print(x2 is y2)
print(x3 is y3)
输出
True
True
False
为什么 Python 会为 y3 分配一个不同的 id,而不是 x3?
这里的x3 和y3 是列表,但Python 对元组和字典也是如此。我还想知道 Python 在哪里还有将新 id 分配给具有相同值的变量的相同行为,为什么会这样?
【问题讨论】:
-
红利:
print(253 is 252+1)和print(258 is 257+1) -
奖励奖励:
print("%s%s" % ("Hello" * 100,"World" * 100) is "Hello" * 100 + "World" * 100) -
结论:将
is用于is None,但仅此而已,除非您知道自己在做什么以及为什么要这样做。 -
见stackoverflow.com/questions/306313/…基本cpython所做的是将所有整数从0保存到NSMALLPOSINTS以优化内存使用。亲自尝试
[sys.getrefcount(x) for x in range(300)]。
标签: python