python - 检查 Python 中的可变性?

标签 python python-3.x immutability python-2.x hashable

考虑一下 code :

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

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

最佳答案

1) 键不能是可变的,除非您有一个用户定义的可散列但也可变的类。这就是强加给你的一切。 但是,使用可散列、可变对象作为 dict 键可能不是一个好主意。

2) 通过不在两个字典之间共享值。可以共享 key ,因为它们必须是不可变的。在 copy 模块的意义上,复制字典绝对是安全的。在此处调用 dict 构造函数也可以:b = dict(a)。你也可以使用不可变的值。

3) 所有内置的不可变类型都是可散列的。所有内置的可变类型都不是可散列的。对于一个可散列的对象,它必须在其整个生命周期内具有相同的散列,即使它已发生变异。

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

如果一个类型不是不可变的,那么它就是可变的。一个类型是不可变的,如果它是一个内置的不可变类型:str, int, long, bool, floattuple,可能还有一些我忘记了。用户定义的类型总是可变的。

如果一个对象不是不可变的,那么它就是可变的。如果一个对象递归地仅由不可变类型的子对象组成,则它是不可变的。因此,列表元组是可变的;元组的元素不能替换,但可以通过列表界面修改,改变整体数据。

关于python - 检查 Python 中的可变性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4374006/

相关文章:

python - 类型错误 : KMeans() got an unexpected keyword argument 'n_clusters'

python - 如何将负位表示的数字转换为 python3 中的实际负 int 值?

constructor - 在构造函数中更改不可变成员

java - 在 Java 中不可变

python - 汉诺塔调用追踪

python - Python 中的元组数组

python - 无法从 'keras_export' 导入名称 'tensorflow.python.util.tf_export'

java - ArangoDB 和 velocypack,使用不可变类作为 dtos

python - 曼哈顿度量中的 Voronoi 图

python - gdal python 背景不是很透明