a = "test"
b = a
c=id(a)
d=id(b)
print("a == b:",a == b)
print("a is b:",a is b)
print(id(a), id(b))
print("id(a) is id(b):",id(a) is id(b))
print("id(a) == id(b):",id(a) == id(b))
print(c, d)
print("c is d:",c is d)
print("c == d:",c == d)
---------- 结果 ----------
a == b: True
a is b: True
1843108275696 1843108275696
id(a) == id(b): True
1843108275696
c is d: False
1843108275696
c == d: True
c == d: True
为什么id(a)是id(b)有假?
我期望id(a)是id(b) True
is
比较对象a和b的内存地址。它们在你的情况下是不同的,将是假的。
更多:is
关键字用于测试两个变量是否指向同一个对象。
文档:https://www.w3schools.com/python/ref_keyword_is.asp
甚至id(a)
和id(a)
(与is
相比)也是不同的,因为它们是int
类型的不同对象。只有非常小的int
绝对值是相同的对象:
>>> int(str(2 ** 6)) is int(str(2 ** 6))
True
>>> int(str(2 ** 16)) is int(str(2 ** 16))
False
需要int(str(...))
转换以防止Python 3.7+对相同的int字面值进行实习。
id
的结果通常是一个大的int
:
>>> id("test")
140023900375784
说01和o2是不同的对象,我的意思是它们不是存储在相同的内存地址。