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

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

为什么?

主要想让大家推荐下,这块知识点应该看什么资料
Python 中的数据映射是什么规则?


12 回复

关键字 python 小整数对象池
参考: https://github.com/Junnplus/blog/issues/12


Python里的数据映射,简单说就是用一个数据结构(通常是字典)来建立键(Key)和值(Value)之间的对应关系。最核心的规则就是通过键来快速查找、访问或修改其关联的值。

核心规则与操作:

  1. 键的唯一性:字典中的每个键必须是唯一且不可变的(如字符串、数字、元组)。如果你给一个已存在的键赋值,新值会覆盖旧值。
  2. 值的任意性:值可以是任何Python对象,并且可以重复。
  3. 访问:用 dict[key] 的语法通过键来获取值。如果键不存在,会引发 KeyError。安全的方式是使用 dict.get(key, default_value)
  4. 添加/修改:直接使用 dict[key] = value。如果键不存在,就是添加新映射;如果键已存在,就是修改其对应的值。
  5. 删除:使用 del dict[key]dict.pop(key) 来删除一个键值对。

一个典型例子:

# 创建一个映射(字典)
student_scores = {"Alice": 95, "Bob": 87, "Charlie": 92}

# 1. 访问:通过键"Bob"获取值
print(student_scores["Bob"])  # 输出: 87

# 2. 添加:映射里没有"David",这是新增
student_scores["David"] = 88
print(student_scores)  # 输出: {'Alice': 95, 'Bob': 87, 'Charlie': 92, 'David': 88}

# 3. 修改:键"Alice"已存在,这是修改其值
student_scores["Alice"] = 98
print(student_scores["Alice"])  # 输出: 98

# 4. 安全访问:使用get方法,避免KeyError
score = student_scores.get("Eve", 0)  # 如果"Eve"不存在,返回默认值0
print(score)  # 输出: 0

一句话总结:记住字典的键唯一且不可变,用键来高效操作值,这就是Python数据映射的基本玩法。

之前有人在 v 站问过类似的问题,可以先搜索下

谢谢,我主要不知道该用什么关键字搜索,不过 1 楼提供啦

python 会缓存小数字和短字符串。

看 cpython 源码即可

楼主看看流畅的 python 第八章呢,应该就是讲的这个

>>> a = 258
>>> b = a
>>> id(a)
14014704
>>> id(b)
14014704
>>> id(258)
14014816
>>>
我还记得超 256 不行,缓存小数字

缓存的小整数池是-5 到 256 整数,超出这个范围 id 就不会相等,除非 a=257;b=257

牛批,每次这个都记不住

强烈建议看一下 github 上的 wtfpython,长了见识

回到顶部