Python中使用copy模块实现列表(list)拷贝

yipeiwu_com7年前Python基础

引用是指保存的值为对象的地址。在 Python 语言中,一个变量保存的值除了基本类型保存的是值外,其它都是引用,因此对于它们的使用就需要小心一些。下面举个例子:

问题描述:已知一个列表,求生成一个新的列表,列表元素是原列表的复制

复制代码 代码如下:

a=[1,2]
b=a

这种做法其实并未真正生成一个新的列表,b指向的仍然是a所指向的对象。这样,如果对a或b的元素进行修改,a,b的值同时发生变化。

解决的方法为:

复制代码 代码如下:

a=[1,2]
b=a[:]

这样修改a对b没有影响。修改b对a没有影响。

但 这种方法只适用于简单列表,也就是列表中的元素都是基本类型,如果列表元素还存在列表的话,这种方法就不适用了。原因就是,象a[:]这种处理,只是将列 表元素的值生成一个新的列表,如果列表元素也是一个列表,如:a=[1,[2]],那么这种复制对于元素[2]的处理只是复制[2]的引用,而并未生成 [2]的一个新的列表复制。为了证明这一点,测试步骤如下:

复制代码 代码如下:

>>> a=[1,[2]]
>>> b=a[:]
>>> b
[1, [2]]
>>> a[1].append(3)
>>> a
[1, [2, 3]]
>>> b
[1, [2, 3]]

可见,对a的修改影响到了b。如果解决这一问题,可以使用copy模块中的deepcopy函数。修改测试如下:
复制代码 代码如下:

>>> import copy
>>> a=[1,[2]]
>>> b=copy.deepcopy(a)
>>> b
[1, [2]]
>>> a[1].append(3)
>>> a
[1, [2, 3]]
>>> b
[1, [2]]

有时候知道这一点是非常重要的,因为可能你的确需要一个新的列表,并且对这个新的列表进行操作,同时不想影响原来的列表。

相关文章

Pytorch中实现只导入部分模型参数的方式

我们在做迁移学习,或者在分割,检测等任务想使用预训练好的模型,同时又有自己修改之后的结构,使得模型文件保存的参数,有一部分是不需要的(don't expected)。我们搭建的网络对保存...

python系统指定文件的查找只输出目录下所有文件及文件夹

python系统指定文件的查找只输出目录下所有文件及文件夹

修改python运行路径 import os os.chdir('C:/Users/86177/Desktop') os.chdir(r'C:\Users\86177\Desktop...

解决在pycharm中显示额外的 figure 窗口问题

解决在pycharm中显示额外的 figure 窗口问题

问题描述 在电脑中重新安装Anaconda3&PyCharm后,运行原来的程序画图时出现了下图界面。 不能弹出如下图所示的“figure”窗口。 解决方法: 这是因为PyCharm在...

python儿童学游戏编程知识点总结

python爬虫基本告一段落,琢磨搞点其他的,正好在网上看到一个帖子,一个外国13岁小朋友用python写的下棋程序,内容详细,也有意思,拿来练手。 13岁啊。。 我这年纪还在敲 dir...

对python中的控制条件、循环和跳出详解

对python中的控制条件、循环和跳出详解 代码缩进(代码块): python用缩进表示代码块,没有其他语言的大括号 缩进是强制检查,整个代码缩进必须一致,否则无法运行 用2、4个空格或...