在python中,a ='test',B ='test'.打印(a是b)为真,打印(id(a)== id(b))为真,打印(id(a)是id(b))为假[重复]

h22fl7wq  于 2023-01-18  发布在  Python
关注(0)|答案(2)|浏览(214)
    • 此问题在此处已有答案**:

"is" operator behaves unexpectedly with integers(11个答案)
昨天关闭。

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:正确
    a是b:正确
    小行星1843
    身份证(a)是身份证(b):假
    标识(a)==标识(b):真的
    小行星1843
    c为d:假
    c == d:正确
    为什么id(a)是id(b)有假呢?
    我希望id(a)是id(b)对
wfsdck30

wfsdck301#

is比较对象a和b的内存地址。在您的情况下,它们是不同的,因此为false。
更多:is关键字用于测试两个变量是否引用同一个对象。
文件:https://www.w3schools.com/python/ref_keyword_is.asp

hkmswyz6

hkmswyz62#

甚至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

o1o2 是不同的对象,我的意思是它们没有存储在相同的内存地址。

相关问题