我正在阅读Slicing a list in Python without generating a copy的答案。答案使用
>>> a = [1000 + 1, 1000 + 1, 1000 + 1]
>>> map(id, a)
[140502922988976, 140502922988952, 140502922988928]
证明每个整数在a
中都有唯一的ID。
作为一个健全性检查,我在自己的环境中运行了以下代码(我在python3上运行,因此必须在list
上调用map
)
> a = [1+1, 1+1, 1+1]
> list(map(id,a))
[140228695033632, 140228695033632, 140228695033632]
我所做的只是将1000
更改为1
,现在python为每个数字分配了相同的ID!我还使用1000
运行了原始代码,该代码给出了三个不同的ID。为什么不同大小的整数的行为不同?
我还想和其他一些不可变的东西玩耍。
组始终获得不同的ID。
> a = [(1,), (1,), (1,)]
> list(map(id,a))
[140228631126592, 140228631112728, 140228631128944]
简单的字符串具有相同的ID。
> a = ['a', 'a', 'a']
> list(map(id,a))
[140068125361128, 140068125361128, 140068125361128]
更长的字符串具有不同的ID。
> a = ['a'*1000, 'a'*1000, 'a'*1000]
> list(map(id,a))
[17589280, 17579408, 17580480]
我还调查了它是否特定于列表:
> a, b = 1+1, 1+1
> a is b
True
> a, b = 1000+1, 1000+1
> a is b
False
这是怎么回事?