gpt4 book ai didi

python - 努力理解 is 运算符的特定行为

转载 作者:行者123 更新时间:2023-12-03 21:09:55 25 4
gpt4 key购买 nike

这个问题在这里已经有了答案:





Why does comparing strings using either '==' or 'is' sometimes produce a different result?

(15 个回答)


12 个月前关闭。




有人可以向我解释这种行为吗?

a = 'Test'
b = 'Test'
print(a is b) # True
我预计结果为 False,因为 a 和 b 是不同的引用。
当使用相等运算符 (==) 来比较值相等时,我所期望的显示结果。
is-operator 是为了比较引用相等?还是我弄错了?
显示行为的原因是什么?

最佳答案

简而言之:==用于值相等和 is用于引用相等(与 id(a)==id(b) 相同)。 Python 缓存小对象(小整数、字符串等)以节省空间(自 py2 以来的功能)。
我原来的详细答案和例子:
因为它们完全一样!is如果两个变量指向同一个对象,则返回True,可以查看id看到真相!
尝试这个:

a = 'Test'
b = 'Test'
print(a is b)
print(id(a),id(b))
我的输出是:
True
140586094600464 140586094600464
因此,为了节省空间 Python 将分配指针相同的位置,直到进行更改
例子:
a = 'Test'
b = 'Test'
print(a is b)
print(id(a),id(b))
a = 'Test'
b += 'Changed'
print(a is b)
print(id(a),id(b))
True
140586094600464 140586094600464
False
140586094600464 140585963428528
一旦进行更改,不可变的字符串将在内存中获得新位置!
如果这是类似 list ,即使它们相同,它们也是可变的,它们将获得不同的位置,因此可以进行更改!
#mutable
a= [1,2]
b= [1,2]
print(a is b)
print(id(a),id(b))
a[0] = -1
b[1] = -2
print(a is b)
print(id(a),id(b))
False
140586430241096 140585963716680
False
140586430241096 140585963716680
Int例如:
a=100 
b=100
print(a is b)
print(id(a),id(b))
True
10917664 10917664

关于python - 努力理解 is 运算符的特定行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64522047/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com