python如何将id分配给不可变的?

2024-03-28 11:37:00 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在通读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上,所以必须在map上调用list

> 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

这是怎么回事


Tags: 字符串答案代码inidmapis整数