Python:字典的值指针会存储其键吗?
我在想,Python有没有内置的方法可以做到这一点……比如说,看看这段简单的代码:
D = {'one': objectA(), 'two': objectB(), 'three': objectC()}
object_a = D['one']
我认为 object_a
只是指向第一行创建的 objectA()
,并不知道字典 D
的存在。我的问题是,Python会存储字典值的键吗?如果我只有变量 object_a
,有没有办法获取键 'one'
(当然,不是通过遍历字典)?
如果没有的话,我可以把值 'one'
存在 objectA()
里面,但我只是好奇Python是否已经存储了这些信息。
4 个回答
2
有没有办法在只拥有变量
object_a
的情况下,获取键 'one' 呢?当然,不想通过循环字典来实现。
没有,Python 不会给你这种几乎没用的多余限制。如果 objA
是一个可以调用的工厂:
d = {'zap': objA()}
a = d['zap']
而且
b = objA()
同样的
L = [objA()]
c = L[0]
这些都会在 a
、b
和 c
中产生完全相同的引用,指向完全等价的对象(如果 objA
最开始给你的是这些),而且没有一点浪费(无论是在这些对象上,还是在任何冗余的、完全假设的辅助结构上)来记录“这是/曾经是列表 L 和/或字典 d 中的某个值,位于这些索引/键” (当然,可能有很多索引/键)。
3
你说的这个dict
映射并不是那么简单就能“反转”的。
键(key)必须是不可变的。也就是说,键不能随便改变,这样才能被用来快速查找,不会出现意外的变化。
值(value)可以是可变的,因为它不需要被哈希(hash)来快速查找。
所以,你不能仅仅通过值回到键,必须先(1)创建一个不可变的值,然后(2)用“反转”的值到键的映射来填充其他类型的映射。
7
我觉得不行。
想象一下,如果要把一个对象添加到很多不同的字典里,Python要为你跟踪这些信息,那就会变得非常耗费资源。这项功能大多数人都用不到,所以这样做的成本会很高。