栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

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

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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

您正在体验的是引用的概念。Python中的所有对象都有一个引用,当您将一个名称分配给两个名称

a
和时
b
,这将导致两者
a
b
指向 _同一_对象。

>>> 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]])


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/638304.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号