a = 1
b = 1
id(a) == id(b)
a = 1.0
b = 1.0
id(a) != id(b)
Run Code Online (Sandbox Code Playgroud)
为什么当a和b是python时的十进制id(a)!= id(b)?
当number为十进制时,python会创建两个对象吗?
唯一的原因id(1) == id(1)是低整数被缓存以提高性能.尝试id(1000) == id(1000)
实际上,有时候这样有效.更好的测试在不同的语句中分配东西:
>>> x = 1
>>> y = 1
>>> id(x) == id(y)
True
>>> x = 1000
>>> y = 1000
>>> id(x) == id(y)
False
>>>
>>> id(1000) == id(1000)
True
Run Code Online (Sandbox Code Playgroud)
在更多条件下,字符串也会发生同样的情况:
>>> x = 'abcdefg'
>>> y = 'abcdefg'
>>> x is y
True
Run Code Online (Sandbox Code Playgroud)
底线是使用is(或比较id()值,本质上是相同的,但更慢)确定两个对象是否相同只是在某些情况下的一个好策略,因为Python将缓存对象以提高性能.
一个硬性的规则是两种不同的可变对象将有不同的id值,但下面的评论者指出,也不能保证是否多个不可改变会或不会被创建的相同值的对象.
当您使用文字值时,解释器更容易缓存内容.如果你计算它的东西,那么你可以看到哪些东西很难缓存,以及它机会性地缓存的东西,因为它注意到它们的附近:
>>> x = 1000
>>> y = 2000 // 2
>>> x is y
False
>>> x == y
True
>>> x = 1
>>> y = 2 // 2
>>> x is y
True
>>>
>>> x = 'abcdefg'
>>> y = 'abcdefg'
>>> x is y
True
>>> y = 'abc' + 'defg'
>>> x is y
True
>>> x = 'abcdefghijklmnopqrstuvwxyz'
>>> y = 'abcdefghijklmnopqrstuvwxyz'
>>> x is y
True
>>> y = 'abcdefghijklm' + 'nopqrstuvwxyz'
>>> x is y
False
>>> x == y
True
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
196 次 |
| 最近记录: |