Discuss / Python / 不可变性的理解

不可变性的理解

Topic source

拿笔小星

#1 Created at ... [Delete] [Delete and Lock User]

mydict0 = {} mydict0[tuple2] = 'tuple2' print(mydict0)

以上程序运行失败: Traceback (most recent call last): File ".\set.py", line 27, in <module> mydict0[tuple2] = 'tuple2' TypeError: unhashable type: 'list'

tuple虽然是不可变的,但此时变量tuple2定义的时候,包含了一个可变对象的数据类型list([4, 5])。这个时候,tuple2其实是可变的了!代码可以稍作修改:

list = [4, 5] tuple2 = (1, 2, list) mydict0 = {} mydict0[tuple2] = 'tuple2' print(mydict0)

我们把[4, 5]在外面定义,那么我就可以随意修改这个变量list。list是可变的,导致依赖list的tuple2也是可变的了!

所以违反了dict和set的不可变性。

刚开始看您的理解,我还以为您理解错了,因为后面您的理解我还以为您觉的(1,2,[3,4])可以放在dict中,刚想反驳您。多看了两遍才发现原来您说的和我想的一样。

我觉得,只要变量中有了像list这样可变的对象,那么就不可以放入dict中,这样都是不满足哈希原则的。应该是这样吧,哈哈哈


  • 1

Reply