定义变量会有:id(唯一标识号,也可以认为是内存地址),type(变量类型),value(变量值)。
- 等号比较的是value,如果value一样,type也一样;
- is比较的是id,也就是比较内存地址;
强调
- id相同,意味着type和value必定相同;
- value相同type肯定相同,但id可能不同;
通过代码进行验证:
a = [1, 2, 3]
b = [1, 2, 3]
c = d = [1, 2, 3]
print('a == b?:', a == b)
print('a is b?:', a is b)
print('='*20)
print('the id of a', id(a))
print('the id of b', id(b))
print('='*20)
print('c == d?:', c == d)
print('c is d?:', c is d)
print('the id of c', id(c))
print('the id of d', id(d))
其输出为
a == b?: True
a is b?: False
====================
the id of a 2043850088968
the id of b 2043850089032
====================
c == d?: True
c is d?: True
the id of c 2043871237512
the id of d 2043871237512
由此可以看出is和==的不同,但是在用自己的电脑终端或者Pycharm测试的时候可能出现a is b结果是True的情况,这是Pycharm或者终端环境做的内存优化,当变量比较长的时候就没有问题了。
参考资料:python编程高手之旅