列表的复制

引用是指保存的值为对象的地址。在 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]]

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

时间: 2024-11-12 02:11:03

列表的复制的相关文章

Python使用+和*操作符 连接2个列表和列表的复制

+ 操作符通常连接两个列表可以使用 +进行连接得到一个新列表 *操作符择可以用于一个列表和一个整数,实现列表的复制. 原文地址:https://www.cnblogs.com/liqiujiong/p/8733132.html

python中对列表浅复制深复制另类的理解方式

'''创建者:徐洋创建时间:2017年6月13日22:25:23代码功能:详细分析列表的浅copy和深度copy'''#导入copy模块import copylist1 = [1,2,3,["a","b","c"]]#对表1进行浅复制list2 = copy.deepcopy(list1)#copy.copy#查询表1中各个元素的内存地址address0 = id(list1[0])address1 = id(list1[1])address2

Python 列表浅复制详解

在文章<Python 数据类型>里边介绍了列表的用法,其中列表有个 copy() 方法,意思是复制一个相同的列表.例如 1 names = ["小明", "小红", "小黑", "小黄", "小白"] 2 # 把 names 复制,赋值给 names2 变量 3 names2 = names.copy() 4 # 分别输出 names names2 5 print(names) 6 print(

(59) 解决在列表视图复制导致打开详细内容

现象:在列表视图中,当你要复制一个内容,就触发click事件,就打开form视图了为了区分click mousedown mousemove muuseup 事件,从而放弃click事件用后面那几个事件组合来解决是要打开,还是复制内容事件 改动代码如下:\addons\web\static\src\js\view_list.js var hasMove =false;        this.$current = $('<tbody>')            .delegate('input

将一个列表的数据复制到另一个列表中

1 ''' 2 提问:将一个列表的数据复制到另一个列表中. 3 请仔细看要求,这里要求的是复制数据到一个新的列表中. 4 Python列表数据复制,Python解题思路分析:可以了解下[ :]的含义 5 ''' 6 l = [1,2,3,4] 7 x = l[:] # x = l.copy() 8 print(x) 原文地址:https://www.cnblogs.com/JerryZao/p/8678880.html

新手学python疑惑(一)—— 列表内容的复制

疑惑在于 <python 程序设计(第2版) 董付国 清华大学出版社>第46页 原文是: [列表推导式] >>>freshfruit=['banana', 'loganberry', 'passion fruit'] >>>aList=[w.strip() for w in freshfruit] 等价于下面的代码: >>>freshfruit=['banana', 'loganberry', 'passion fruit'] >&g

python的列表复制详解

非复制但内容一致的情况 首先生成列表list1,list2,查看其中内容,对内容做比较,对内存id做比较: list1 = list(range(5)) list2 = list(range(5)) print(list1) print(list2) print(list1 == list2) print("list1 ID:",id(list1)) print("list2 ID:",id(list2)) 输出结果为: [0, 1, 2, 3, 4] [0, 1,

列表的浅复制和深复制

浅复制,只复制第一个层(第一层是独立复制出来的),如果列表里再套一个列表则复制的是内存地址(也就是说一改都改): 1 name = ["a","b",["alex","blue"],"c","d"] 2 name2 = name.copy() 3 print(name) 4 print(name2) 5 name[1]="王" 6 name[2][0]="A

Python学习教程:Python列表赋值,复制,深拷贝及5种浅拷贝详解

Python学习教程:Python列表赋值,复制,深拷贝及5种浅拷贝详解 概述 在列表复制这个问题,看似简单的复制却有着许多的学问,尤其是对新手来说,理所当然的事情却并不如意,比如列表的赋值.复制.浅拷贝.深拷贝等绕口的名词到底有什么区别和作用呢? 列表赋值 # 定义一个新列表l1 = [1, 2, 3, 4, 5]# 对l2赋值l2 = l1print(l1)l2[0] = 100print(l1) 示例结果: [1, 2, 3, 4, 5][100, 2, 3, 4, 5] 可以看到,更改赋