【发布时间】:2011-08-03 19:07:20
【问题描述】:
谁能给我解释一下?所以我一直在玩python中的 id() 命令并遇到了这个:
>>> id('cat')
5181152
>>> a = 'cat'
>>> b = 'cat'
>>> id(a)
5181152
>>> id(b)
5181152
这对我来说很有意义,除了一个部分:字符串“cat”在我将它分配给变量之前在内存中有一个地址。我可能只是不明白内存寻址的工作原理,但有人可以向我解释一下,或者至少告诉我应该阅读内存寻址吗?
所以这一切都很好,但这让我更加困惑:
>>> a = a[0:2]+'t'
>>> a
'cat'
>>> id(a)
39964224
>>> id('cat')
5181152
这让我觉得很奇怪,因为 'cat' 是一个地址为 5181152 的字符串,但新的 a 有不同的地址。那么如果内存中有两个 'cat' 字符串,为什么不为 id('cat') 打印两个地址呢?我最后的想法是串联与地址的变化有关,所以我尝试了这个:
>>> id(b[0:2]+'t')
39921024
>>> b = b[0:2]+'t'
>>> b
'cat'
>>> id(b)
40000896
我会预测 ID 是相同的,但事实并非如此。想法?
【问题讨论】:
标签: python memory-address