考虑一下 code :
a = {...} # a is an dict with arbitrary contents
b = a.copy()
- 可变性在字典的键和值中起什么作用?
- 如何确保一个字典的键或值的更改不会反射(reflect)在另一个字典中?
- 这与可散列的 constraint 有何关系? dict 键?
- Python 2.x 和 Python 3.x 之间的行为有什么不同吗?
如何检查 Python 中的类型是否可变?
最佳答案
1) 键不能是可变的,除非您有一个用户定义的可散列但也可变的类。这就是强加给你的一切。 但是,使用可散列、可变对象作为 dict 键可能不是一个好主意。
2) 通过不在两个字典之间共享值。可以共享 key ,因为它们必须是不可变的。在 copy
模块的意义上,复制字典绝对是安全的。在此处调用 dict 构造函数也可以:b = dict(a)
。你也可以使用不可变的值。
3) 所有内置的不可变类型都是可散列的。所有内置的可变类型都不是可散列的。对于一个可散列的对象,它必须在其整个生命周期内具有相同的散列,即使它已发生变异。
4) 我不知道;我描述的是 2.x。
如果一个类型不是不可变的,那么它就是可变的。一个类型是不可变的,如果它是一个内置的不可变类型:str
, int
, long
, bool
, float
、tuple
,可能还有一些我忘记了。用户定义的类型总是可变的。
如果一个对象不是不可变的,那么它就是可变的。如果一个对象递归地仅由不可变类型的子对象组成,则它是不可变的。因此,列表元组是可变的;元组的元素不能替换,但可以通过列表界面修改,改变整体数据。
关于python - 检查 Python 中的可变性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4374006/