-
Python中列表的copy方法
2017-05-30 01:50:00Python中列表的copy方法 1.在列表中存在一个名为copy的方法,就像字面意思一样copy方法是用于复制列表元素的,示例如下: 1 names = [‘Zhangsan’,’Lisi’,’WangErgou’] 2 names2 = names.copy() 3 ...1.在列表中存在一个名为copy的方法,就像字面意思一样copy方法是用于复制列表元素的,示例如下:
1 names = [‘Zhangsan’,’Lisi’,’WangErgou’] 2 names2 = names.copy() 3 print(names,names2)
当然执行结果也跟想象中是一样的:
[‘Zhangsan’,’Lisi’,’WangErgou’] [‘Zhangsan’,’Lisi’,’WangErgou’]
如果修改了其中一项元素,会不会影响复制体呢?
1 names = [‘Zhangsan’,’Lisi’,’WangErgou’] 2 names2 = names.copy() 3 print(names,names2) 4 names[1] = “Zhaowu” 5 print(names,names2)
结果显而易见,复制体和本体互不影响,结果如下:
1 [‘Zhangsan’,’Lisi’,’WangErgou’] [‘Zhangsan’,’Lisi’,’WangErgou’] 2 [‘Zhangsan’,’Zhaowu’,’WangErgou’] [‘Zhangsan’,’Lisi’,’WangErgou’]
那么列表嵌套是否也适用呢,测试一下:
1 names = [‘Liuneng’,’Zhaosi’,[’SongXiaofeng’,’LiuDanaodai'],’XieGuangkun’] 2 names2 = names.copy() 3 print(names,names2) 4 names[2][0] = ‘XieDajiao’ 5 print(names,names2)
额,结果好像有点不同:
1 [‘Liuneng’,’Zhaosi’,[’SongXiaofeng’,’LiuDanaodai'],'XieGuangkun'] [‘Liuneng’,’Zhaosi’,[’SongXiaofeng’,’LiuDanaodai'],’XieGuangkun’] 2 [‘Liuneng’,’Zhaosi’,[’XieDajiao’,’LiuDanaodai'],’XieGuangkun’] [‘Liuneng’,’Zhaosi’,[’XieDajiao’,’LiuDanaodai'],’XieGuangkun’]
原来主列表只是存储了嵌套列表在内存中的地址,而不是所看到的数据,copy的也只是嵌套列表的地址,但两个地址指向的是内存中同一块区域,所以在对嵌套列表进行修改时,只是通过了两个复制地址而修改了真实数据,所以两个列表的元素都被改掉了。
当然,肯定会有完全独立的复制的需求,此时则需要导入一个copy模块来实现了:
1 import copy
2 names = ['zhao','qian',['sun','li'],'zhou']
3 names2 = copy.copy(names)
4 print(names,names2)
5 names[2][0] = 'wu'
6 print(names,names2)执行之后得到结果:
1 ['zhao','qian',['sun','li'],'zhou’] ['zhao','qian',['sun','li'],'zhou’] 2 ['zhao','qian',[‘wu','li'],'zhou’] ['zhao','qian',['wu','li'],'zhou']
-.-# 好吧,copy模块的copy方法和python列表的内置函数copy是一样的,想要完全复制则需要深层copy:
1 import copy 2 names = ['zhao','qian',['sun','li'],'zhou'] 3 names2 = copy.deepcopy(names) 4 print(names,names2) 5 names[2][0] = 'wu' 6 print(names,names2)
执行之后得到结果:
1 ['zhao','qian',['sun','li'],'zhou’] ['zhao','qian',['sun','li'],'zhou’] 2 ['zhao','qian',[‘sun','li'],'zhou’] ['zhao','qian',['wu','li'],'zhou']
好了,最后终于得到的完全复制的结果。
-
python列表复制_【python3】关于列表的copy方法的一个官方bug
2020-12-18 04:43:48使用help函数可以看到,官方对字典和列表的copy方法均描述为浅复制,浅复制原理是复制了对象的地址(使用id函数可以观察)。>>> help(dict.copy)Help on method_descriptor:copy(...)D.copy() -> a ...该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
不认同你的说法,出现这种原因在于python将int型视为不可变类型。
使用help函数可以看到,官方对字典和列表的copy方法均描述为浅复制,浅复制原理是复制了对象的地址(使用id函数可以观察)。
>>> help(dict.copy)
Help on method_descriptor:
copy(...)
D.copy() -> a shallow copy of D
>>> help(list.copy)
Help on method_descriptor:
copy(...)
L.copy() -> list -- a shallow copy of L
我们对对象中的不可变类型元素进行“修改”时,实际上是将这个元素指向了其他地址。这就是为什么你误解这段代码及其结果:
>>> a[0] = 10
>>> a
[10, 2, [3, 4]]
>>> b
[1, 2, [3, 4]]
我们使用id函数来看看其中的变化:
>>> a = [1, 2, [3, 4]]
>>> b = a.copy()
>>> [id(x) for x in a]
[1384787088, 1384787104, 49367440]
>>> [id(x) for x in b]
[1384787088, 1384787104, 49367440]
可以看到地址相同,确实实现了浅复制。
那当我们“修改”a[0]呢?
>>> a[0] = 10
>>> b
[1, 2, [3, 4]]
>>> [id(x) for x in a]
[1384787232, 1384787104, 49367440]
>>> [id(x) for x in b]
[1384787088, 1384787104, 49367440]
实际上a[0]被指向了新的地址。
现在我们创建一个变量,其值为10,再看看它的地址:
>>> c = 10
>>> id(c)
1384787232
它指向的地址与a[0]相同。现在你知道是什么问题了吗?
-
列表的copy, deepcopy
2018-09-08 09:43:28#将一个列表的数据复制到另一个列表中。 import copy lsta = [1,[2,3],4] lstb = lsta[:] 或者lstb = lsta 或者lstb=lsta.copy() print(lstb) lsta[1][0] = 5 print(lsta) print(lstb) 运行结果都是: [1, [2, 3], ...#将一个列表的数据复制到另一个列表中。 import copy lsta = [1,[2,3],4] lstb = lsta[:] 或者lstb = lsta 或者lstb=lsta.copy() print(lstb) lsta[1][0] = 5 print(lsta) print(lstb) 运行结果都是: [1, [2, 3], 4] [1, [5, 3], 4] [1, [5, 3], 4] import copy lsta = [1,[2,3],4] lstb = copy.deepcopy(lsta) print(lstb) lsta[1][0] = 5 print(lsta) print(lstb) deepcopy运行结果是: [1, [2, 3], 4] [1, [5, 3], 4] [1, [2, 3], 4]
-
diveintopython3 official_【python3】关于列表的copy方法的一个官方bug
2020-12-17 12:15:58使用help函数可以看到,官方对字典和列表的copy方法均描述为浅复制,浅复制原理是复制了对象的地址(使用id函数可以观察)。>>> help(dict.copy)Help on method_descriptor:copy(...)D.copy() -> a ...该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
不认同你的说法,出现这种原因在于python将int型视为不可变类型。
使用help函数可以看到,官方对字典和列表的copy方法均描述为浅复制,浅复制原理是复制了对象的地址(使用id函数可以观察)。
>>> help(dict.copy)
Help on method_descriptor:
copy(...)
D.copy() -> a shallow copy of D
>>> help(list.copy)
Help on method_descriptor:
copy(...)
L.copy() -> list -- a shallow copy of L
我们对对象中的不可变类型元素进行“修改”时,实际上是将这个元素指向了其他地址。这就是为什么你误解这段代码及其结果:
>>> a[0] = 10
>>> a
[10, 2, [3, 4]]
>>> b
[1, 2, [3, 4]]
我们使用id函数来看看其中的变化:
>>> a = [1, 2, [3, 4]]
>>> b = a.copy()
>>> [id(x) for x in a]
[1384787088, 1384787104, 49367440]
>>> [id(x) for x in b]
[1384787088, 1384787104, 49367440]
可以看到地址相同,确实实现了浅复制。
那当我们“修改”a[0]呢?
>>> a[0] = 10
>>> b
[1, 2, [3, 4]]
>>> [id(x) for x in a]
[1384787232, 1384787104, 49367440]
>>> [id(x) for x in b]
[1384787088, 1384787104, 49367440]
实际上a[0]被指向了新的地址。
现在我们创建一个变量,其值为10,再看看它的地址:
>>> c = 10
>>> id(c)
1384787232
它指向的地址与a[0]相同。现在你知道是什么问题了吗?
-
可变与不可变类型数据,列表的copy方法
2018-08-12 15:19:00我们先来了解一下可变与不可变类型的数据 (1)可变类型:列表,字典(内存中的数据允许被修改) 不可变类型:数字,字符串,元组(内存中的数据不允许被修改) ...(2)接着我们来看一下列表的copy方法,copy... -
Python学习记录W2-08:列表的copy
2018-04-24 19:18:24#拷贝列表a=[1,2,[4,5],3]b=a.copy() #b拷贝了a,但是这个copy是浅copy,只拷贝列表的第一层a[0]=99 #把a列表改为[99,2,[4,5],3]print(b) #b列表还是[1,2,[4,5],3]a[2][0]=44 #把a列表改为[99,2,[44,5],3]print(b) ... -
8、clone使用和数组列表的copy
2018-09-30 14:15:00有时候在写工程的时候,已经有一个对象了,但是需要重新生成一个对象,并且想把之前对象的部分字段信息或者全部信息copy过来,这个时候可以使用new 对象,然后一行行copy的方式。这样子会很麻烦如果这个类有100个... -
python中列表的深copy和浅copy
2020-02-06 13:44:04深copy和浅copy具体表现在列表中的列表。当改变里面列表中的值的时候,深copy和浅copy是有区别的。 浅copy:就是只copy了第一层元素,对于所有引用地址类型的数据,并不会copy出绝对独立的数据。 深copy:(要... -
列表去重中的copy问题
2020-11-06 16:43:37列表去重中的copy问题有多少的小伙伴知道或者了解呢?... 第三种,循环遍历,判断当前元素的个数是否大于1,然后在删除当前元素(需注意删除元素后列表的变化),无序。 今天主要说的就是第三种方法了 -
深浅copy列表
2020-11-24 22:27:35浅copy list1=[ 'lina', 18, [1,2] ] list2=list1.copy() :是把原列表第一层的的内存地址不加区分完全copy一份给新列表 ...小结:如果想copy一个新的列表,想让两个列表完全独立开,并且针对改的 -
列表深浅copy
2018-05-07 21:02:00# l1 = [1, 2, 3]# l2 = l1# l3 = l2# l3.append(666) #对l3增加一个元素,l1和l2也都增加了# print(id(l1),id(l2),id(l3)) #三个的内存地址相同# print(l1, l2, l3)# 结果:1414378562376 141437856... -
列表的使用2,深COPY和浅COPY,循环列表,步长切片
2017-08-10 20:04:00name2=names.copy() 下面我看几种奇怪的现象: 首先把源列表copy以后,把源列表第2个数值修改。那么没毛病。 ...如果源列表里,还包含了一个子列表:这也没毛病 ...只会COPY子列表的内存指针,内存地址。 如果你... -
列表中的Copy与DeepCopy
2016-12-12 10:19:01import copy originalList = ['a','b',[1,2]] passingList = originalList print('OriginalList:') print(originalList) copyList = copy.copy(originalList) deepcopyList = copy.deepcopy(originalList) print('__ -
python中列表copy
2018-02-10 20:12:50python中copy为浅复制可见,copy只能copy第一层,列表里包含列表等时,copy的是内存地址而如果不copy,直接赋值呢,那么直接传递的就是内存地址那如果想深copy呢,引入copy模块,copy.copy()事实上。,浅copy不只有... -
新手小白学python——列表的深浅copy
2019-09-16 13:49:42列表的深浅copy 对于列表这种复杂数据类型变量在内存中保存的形式如下: 列表中保存的是数据的内存地址而不是数据本身 列表在内存中的存在 -
Python列表copy
2015-04-26 15:53:42问题描述:已知一个列表,求生成一个新的列表,列表元素是原列表的复制 a=[1,2] b=a 这种做法其实并未真正生成一个新的列表,b指向的仍然是a所指向的对象。这样,如果对a或b的元素进行修改,a,b的值同时... -
Python列表之如何copy列表
2020-09-04 15:34:44方法 说明 lst.append(x) 将元素x添加至列表lst尾部 ...将列表L中所有元素添加至列表lst尾部 ...在列表lst中删除首次出现的指定元素,该元素之后的所有元素前移一个位置 lst.pop([in.. -
python3关于列表的复制(copy)以及关于列表地址的问题
2020-12-15 22:13:36几个copy方法 import copy a = [1, 2, [3, 4], 5] b = a c = [] c[:] = a d = a.copy() e = [] for i in a: e.append(i) f = [] f.extend(a) g = copy.copy(a) h = copy.deepcopy(a) i = a[:] print(a, b, c, d, e,... -
python列表中的深浅copy
2018-11-05 22:32:00列表中的赋值和平常的赋值是不一样的,看下面的代码: In [1]: a = 1 In [2]: b = a In [3]: a Out[3]: 1 In [4]: b Out[4]: 1 In [5]: id(a) Out[5]: 4452948992 In [6]: id(b) Out[6]:... -
list封装的copy方法实现对列表的浅拷贝
2021-01-12 17:47:56list 封装的copy 方法实现对列表的浅拷贝,浅拷贝只拷贝一层,到底是怎么回事呢?今天番茄加速就来讲一下。 In [38]: c =[1,3,5] In [39]: cc = c.copy() c和cc分别指向一片不同内存,这样修改cc的第一个元素,原来c... -
web无序列表去掉点_列表去重中的copy问题
2020-12-21 04:49:47第三种,循环遍历,判断当前元素的个数是否大于1,然后在删除当前元素(需注意删除元素后列表的变化),无序。今天主要说的就是第三种方法了。示例代码:list1 = [1,3,4,1,2,2,2,2,1,2]for item in lis... -
python前后去列表空格_好程序员Python培训分享列表去重中的copy问题
2021-01-28 02:56:13列表去重中的copy问题有多少的小伙伴知道或者了解呢?不清楚的小伙伴也不要着急,本篇文章好程序员Python培训小编就给读者们分享一下列表去重中的copy问题,希望对读者们有所帮助。 一般而言,列表去重无非那几种...
-
认识下基数排序
-
2021-02-26
-
MobaXterm.9.4.zip
-
Mysql数据库面试直通车
-
mac下git push每次都需要输入账户密码解决
-
mysql备份shell
-
Kubernetes架构.pdf
-
查杀端口进程
-
微信读书APP协议阅读 2021-2-26
-
Docker跨主机网络-macvlan
-
绿色蜂窝网络的认知网络合作
-
china_regional_data.sql
-
MySQL 管理利器 mysql-utilities
-
denny-hong:我的个人JAM堆栈博客和投资组合网站基于Nextjs-源码
-
go定时任务
-
料斗:FEC-源码
-
突袭:请只是为了好玩别禁止我-源码
-
signglossR:促进手语数据和词汇的可视化表示-源码
-
普通会员计划-源码
-
DHCP 动态主机配置服务(在Linux环境下,配置单网段或跨网段提)