Python 中的数据映射是什么规则?

2019-01-25 00:51:56 +08:00
 ooleslie
example.1
input:
a = 3
b = a
id(a)
id(b)
id(3)

output:
id(a)=4531258544
id(b)=4531258544
id(3)=4531258544

example.2
input:
a = -1000
b = a
id(a)
id(b)
id(3)

output:
id(a)=4534237776
id(b)=4534237776
id(-1000)=4534237968

为什么?

主要想让大家推荐下,这块知识点应该看什么资料
2433 次点击
所在节点    Python
11 条回复
junnplus
2019-01-25 00:59:17 +08:00
关键字 python 小整数对象池
参考: https://github.com/Junnplus/blog/issues/12
kkk330
2019-01-25 01:07:21 +08:00
之前有人在 v 站问过类似的问题,可以先搜索下
ooleslie
2019-01-25 01:08:19 +08:00
@kkk330 谢谢,我主要不知道该用什么关键字搜索,不过 1 楼提供啦
0xABCD
2019-01-25 08:04:07 +08:00
Qzier
2019-01-25 08:23:46 +08:00
python 会缓存小数字和短字符串。
Qzier
2019-01-25 08:24:27 +08:00
看 cpython 源码即可
bruce00
2019-01-25 08:39:54 +08:00
楼主看看流畅的 python 第八章呢,应该就是讲的这个
XxxxD
2019-01-25 08:55:58 +08:00
>>> a = 258
>>> b = a
>>> id(a)
14014704
>>> id(b)
14014704
>>> id(258)
14014816
>>>
我还记得超 256 不行,缓存小数字
builtins
2019-01-25 09:51:24 +08:00
缓存的小整数池是-5 到 256 整数,超出这个范围 id 就不会相等,除非 a=257;b=257
zepc007
2019-01-25 11:10:51 +08:00
@builtins 牛批,每次这个都记不住
builtins
2019-01-25 11:24:49 +08:00
强烈建议看一下 github 上的 wtfpython,长了见识

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/530431

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX