You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python集合为何无法同时存入等值int和float,如何实现该存储需求

问题1:出现该现象的原因是什么?

Python 中集合元素去重、字典键唯一性的判定有两个必须同时满足的核心条件:

  • 两个对象的哈希值(hash()返回值)相等
  • 两个对象的相等判断(==运算)返回True

Python的数值类型设计中,9 == 9.0的运算结果为True,且两者的哈希值也完全相等,因此会被集合判定为重复元素,添加9.0时不会生效;字典中也会被判定为同一个键,导致后续赋值覆盖原有值。

问题2:如何才能将这两个元素同时添加到集合中?

你可以将数值和它的类型绑定为元组后再存入集合/作为字典键,利用元组的哈希和相等判定逻辑,区分开数值相等但类型不同的元素:

# 集合实现示例
s = {(int, 4), (float, 6.7), (float, 2.12), (int, 9)}
# 添加整数9和浮点数9.0
s.add((int, 9))
s.add((float, 9.0))
print(s) # 输出包含{(int,9), (float,9.0)}两个元素
# 存在性判断符合需求
print((float, 9.0) in s) # 主动添加后返回True,未添加时返回False
# 字典实现示例
d = {}
d[(int, 3)] = "整数3"
d[(float, 3.0)] = "浮点数3.0"
print(d) # 两个键会同时存在,分别映射不同的值

如果觉得每次写元组比较繁琐,也可以自定义封装数值类,重写__hash__和__eq__方法,将类型纳入判定逻辑即可。

内容的提问来源于stack exchange,提问作者Riccardo Bucco

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 08:36:03