1.id()
与下面is相关联
例如在python中,值是靠引用来传递的。
我们可以用id()来判断两个变量是否为同一个值的引用。我们可以将id值理解为那块内存的地址标识。
id()返回其十进制的地址。
1.那我们怎么用id()判断数据类型是否可变呢
我们可以先定义两个相同的可变数据类型和一个两个不可变数据类型
然后我们再打印出他们的id。
a = 1
b = 1
print(id(a))
print(id(b))
a = [1, 2]
b = [1, 2]
print(id(a))
print(id(b))
然后我们可以看到输出结果
当两个变量内容相同时,不可变数据类型地址相同,可变数据类型不相同(随机)。
2.is
is:判断两个对象是否具有相同的内存地址。用于比较两个对象是否指向同一内存地址,即是否为同一个对象。
见下图,is依旧可以判断数据类型是什么。
因此,我们可以再次得出
当两个变量内容相同时,不可变数据类型地址相同,可变数据类型不相同(随机)。
但是,这样的写法是不对的
在第一个例子中,id(a)==
id(b)比较的是a和b的标识符是否相等。由于a与b都是整数1,它们具有相同的标识符,因此返回True。
在第二个例子中,id(a) is id(b)比较的是id(a)和 id(b)的地址是否相等,即使在外部实现的id(a)与id(b)数值相等。但是在内部id()使用的时候。由于使用is,is会再次从左到右判断内存地址,两个id()同时生成地址时不一定一样。这两个生成的是随机的(小概率第二个结果为True)。
3.==
==: 不涉及对象的内存地址,只关心值的比较。用于比较两个对象的值是否相等,是Python中的等值比较运算符。
a = 1
b = 1
print(id(a) == id(b))
print(a == b)
'''
运行结果:
True
True
'''
==仅仅是比较值是否相等。