内置类型的问题——赋值创建引用,而非拷贝 | 第二部分 类型与操作 —— 第 9 章: 元组,文件和其他 |《学习 python:强大的面向对象编程(第 5 版)》| python 技术论坛-大发黄金版app下载

未匹配的标注

因为这是一个如此中心的概念,我就再提一次:程序中对可变对象的共享引用会很重要。比如,在下面例子中,被分配给变量名 l 的列表对象被 l 和被分配给变量名 m 的列表的内部同时引用。就地改变l也会改变m引用的内容:

>>> l = [1, 2, 3]
>>> m = ['x', l, 'y'] # embed a reference to l
>>> m
['x', [1, 2, 3], 'y']
>>> l[1] = 0 # changes m too
>>> m
['x', [1, 0, 3], 'y']

这个效果通常只有在更大的程序中才会变得重要,且共享引用通常就是你想要的。如果对象在你使用它们的时候以不想要的方式发生了改变,可以通过明确地拷贝他们来避免共享对象。对于列表,总是可以通过使用空限制切片(之前描述过的其它技术之一)来创建一个顶层的拷贝:

>>> l = [1, 2, 3]
>>> m = ['x', l[:], 'y'] # embed a copy of l (or list(l), or l.copy())
>>> l[1] = 0 # changes only l, not m
>>> l
[1, 0, 3]
>>> m
['x', [1, 2, 3], 'y']

记住:切片限制默认为0和被切片序列的长度;如果开头和末尾都省略,切片会提取序列中的每一项,因此创建了一个顶层的拷贝(一个新的,未共享的对象)。

本文章首发在 大发黄金版app下载 网站上。

上一篇 下一篇
讨论数量: 0



暂无话题~
网站地图