有人可以向我解释这种行为吗?
a = 'Test'
b = 'Test'
print(a is b) # True
Run Code Online (Sandbox Code Playgroud)
我预计结果为 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))
Run Code Online (Sandbox Code Playgroud)
我的输出是:
True
140586094600464 140586094600464
Run Code Online (Sandbox Code Playgroud)
因此,为了节省空间 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))
Run Code Online (Sandbox Code Playgroud)
True
140586094600464 140586094600464
False
140586094600464 140585963428528
Run Code Online (Sandbox Code Playgroud)
一旦进行更改,不可变的字符串将在内存中获得新位置!
如果这是类似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))
Run Code Online (Sandbox Code Playgroud)
False
140586430241096 140585963716680
False
140586430241096 140585963716680
Run Code Online (Sandbox Code Playgroud)
Int 例如:
a=100
b=100
print(a is b)
print(id(a),id(b))
Run Code Online (Sandbox Code Playgroud)
True
10917664 10917664
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
101 次 |
| 最近记录: |