0%

is和==比较区别

is

** is比较的对象为内存地址

1
2
3
4
5
6
7
8
>>> a = [1,2,3]
>>> b = a[:]
>>> id(a)
140379285741320
>>> id(b)
140379285738696
>>> a is b
False

==

** ==比较的对象是值

1
2
3
4
5
6
7
8
>>> a = [1,2,3]
>>> b = a[:]
>>> id(a)
140379285741320
>>> id(b)
140379285738696
>>> a == b
True

关于int类型的缓存

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
>>> a = 1
>>> b = 1
>>> id(a)
9322464
>>> id(b)
9322464
>>> a is b
True


>>> a = 999
>>> b = 999
>>> id(a)
140379285517520
>>> id(b)
140379285517584
>>> a is b
False

上述当ab都等于1的时候,两者指向的内存地址一致,但当ab赋值了999后,两者指向的内存地址不一致。

产生的原因

python对于int类型进行缓存,当int属于[-5, 256]范围的时候,会被缓存,倘若在这个区间进行赋值,则指向的内存地址都是一致的。

这个产生的原因比较复杂,倘若a和b都赋值在同一行,则两者is比较也是True,具体可以看refer。

https://stackoverflow.com/questions/15171695/whats-with-the-integer-cache-inside-python

坚持原创技术分享,您的支持将鼓励我继续创作!