我正在学习python,并且对元组有困惑。如果元组中的元素是不可变的,那我该如何更改一个元组中存在的字典值?为什么我们可以更改元组内的字典值?
E.g.
test_dict = {'a':2,'b':3}
test_tup = (test_dict,3)
test_tup[0]['b'] = 4
如果我打印test_tup
,然后b
值更新为4:提前
>>> test_tup
({'a': 3, 'b': 4}, 3)
感谢。
我正在学习python,并且对元组有困惑。如果元组中的元素是不可变的,那我该如何更改一个元组中存在的字典值?为什么我们可以更改元组内的字典值?
E.g.
test_dict = {'a':2,'b':3}
test_tup = (test_dict,3)
test_tup[0]['b'] = 4
如果我打印test_tup
,然后b
值更新为4:提前
>>> test_tup
({'a': 3, 'b': 4}, 3)
感谢。
请记住,python中的每个值都是对对象的引用。
因此,而不是想着你的元组为类型的字典的元组,例如,把它当做至出头,在那些出头的类型的字典引用的元组。情况并非如此,元组内的。它们自己存在,并且元组的元素参考给他们。
现在,考虑这种方式,元组是不可变的。您无法更改其结构/大小,也无法更改其元素,这意味着您无法用一个参考替换另一个参考。
但是,被引用的对象可以是可变的。无论是否被元组引用,它们都是独立存在的。
如果元组中的元素是不可变的,那我怎么能改变它们呢?
它们不是不可变的。元组是。
你的元组只包含对字典的引用,它不能跟踪你对其中的东西所做的任何修改(它会怎样?)。
通过更改的,它明白,你不能做到这一点:
test_tup[0] = {}
这是改变基准的元组成立。
这意味着您可以更改字典中某个键的值,但不能将字典本身更改为空字典。 – uniXVanXcel