您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

Python对象混乱:a = b,修改b并进行更改!

Python对象混乱:a = b,修改b并进行更改!

您正在体验的是引用的概念。Python中的所有对象都有一个引用,当您将一个名称分配给两个名称a和时b,这将导致两者ab指向 _同一_对象。

>>> a = range(3)
>>> b = a                     # same object
>>> b.append(3)
>>> a, b                      # same contents
([0, 1, 2, 3], [0, 1, 2, 3])

随着名单,你可以创建一个新的列表b一个 副本,一个a使用b = a[:]

>>> a = range(3)
>>> b = a[:]                  # make b a new copy of a
>>> b.append(3)
>>> a, b                      # a is left unchanged
([0, 1, 2], [0, 1, 2, 3])

有关任何对象的更通用解决方案,请使用copy模块。浅表副本将复制要复制的对象中存储的引用,而深表副本将递归地创建所有对象的新副本。

>>> a = [range(2), range(3)]
>>> b = copy.copy(a)          # shallow copy of a, equivalent to a[:]
>>> b[0] = range(4)
>>> a, b                      # setting an element of b leaves a unchanged
([[0, 1], [0, 1, 2]], [[0, 1, 2, 3], [0, 1, 2]])
>>> b[1].append(3)
>>> a, b                      # modifying an element of b modifies the element in a
([[0, 1], [0, 1, 2, 3]], [[0, 1, 2, 3], [0, 1, 2, 3]])

>>> a = [range(2), range(3)]
>>> b = copy.deepcopy(a)      # deep recursive copy of a
>>> b[1].append(3)
>>> a, b                      # modifying anything in b leaves a unchanged
([[0, 1], [0, 1, 2]], [[0, 1], [0, 1, 2, 3]])
python 2022/1/1 18:39:10 有258人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶