【问题标题】:Why can we change a dictionary value inside a tuple? [duplicate]为什么我们可以更改元组中的字典值? [复制]
【发布时间】:2016-04-05 02:39:57
【问题描述】:

我正在学习 python,但我对元组感到困惑。如果元组中的元素是不可变的,那么我如何更改元组中存在的字典值?

例如

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 python-2.7 tuples immutability


    【解决方案1】:

    请记住,python 中的每个值都是对对象的引用

    因此,例如,不要将您的元组视为 dict 的元组,而是将其视为 对某物的引用的元组,其中这些东西是 dict . dicts 不是 inside 元组的情况。它们独立存在,元组的元素引用它们。

    现在,这样想,元组是不可变的。您无法更改其结构/大小,也无法更改其元素,这意味着您无法将一个引用替换为另一个。

    但是,被引用的对象可以是可变的。它们独立存在,与元组引用无关。

    如果元组中的元素是不可变的,那么我该如何更改它们?

    它们不是一成不变的。元组是。

    【讨论】:

      【解决方案2】:

      您的元组仅包含对字典的引用,它无法跟踪您对其中的内容所做的任何更改(它会如何?)。

      通过不变性,可以理解您不能这样做:

      test_tup[0] = {}
      

      这是更改元组所持有的引用

      【讨论】:

      • 意味着您可以更改字典中键的值,但不能将字典本身更改为空字典。
      猜你喜欢
      • 1970-01-01
      • 2014-06-09
      • 1970-01-01
      • 1970-01-01
      • 2021-04-16
      • 1970-01-01
      • 1970-01-01
      • 2021-04-12
      • 2021-10-06
      相关资源
      最近更新 更多