小编典典

检查Python中的可变性?

python

考虑以下代码

a = {...} # a is an dict with arbitrary contents
b = a.copy()
  1. 变异性在字典的键和值中起什么作用?
  2. 如何确保对一个键的键或值的更改不会在另一个中反映出来?
  3. 这与字典键的可散列约束有何关系?
  4. Python 2.x和Python 3.x之间在行为上有什么区别吗?

如何检查类型在Python中是否可变?


阅读 223

收藏
2021-01-20

共1个答案

小编典典

1)密钥不能是可变的, 除非 您具有可哈希且可变的用户定义类。这就是强迫您执行的所有操作。
但是,使用可哈希的可变对象作为dict键可能不是一个好主意。

2)不共享两个字典的值。共享密钥是可以的,因为它们必须是不可变的。从copy模块意义上来说,复制字典绝对是安全的。这里调用构造函数字典工作,也:b = dict(a)。您也可以使用不可变值。

3)所有内置的不可变类型都是可哈希的。所有内置的可变类型都不可哈希。为了使对象可哈希化,即使对象被突变,它在整个生命周期中也必须具有相同的哈希值。

4)不是我所知道的;我正在描述2.x。

如果类型是不可变的,则它是可变的。A型是不可变的,如果它是一个内置的不可变类型:strintlongboolfloattuple,,也许一对夫妇别人,我忘了。用户定义的类型始终是可变的。

如果对象是不可变的,则该对象是可变的。如果对象仅由不可变类型的子对象递归组成,则它是不可变的。因此,列表的元组是可变的;您不能替换元组的元素,但是可以通过列表界面修改它们,从而更改整体数据。

2021-01-20