Python中List的复制(直接复制、浅拷贝、深拷贝) 您所在的位置:网站首页 stringcopy怎么用 Python中List的复制(直接复制、浅拷贝、深拷贝)

Python中List的复制(直接复制、浅拷贝、深拷贝)

2024-01-01 12:18| 来源: 网络整理| 查看: 265

直接赋值:

如果用 = 直接赋值,是非拷贝方法。

这两个列表是等价的,修改其中任何一个列表都会影响到另一个列表。

old = [1,[1,2,3],3] new = [] for i in range(len(old)): new.append(old[i]) new[0] = 3 new[1][0] = 3 ''' ----------------------- Before: [1, [1, 2, 3], 3] [1, [1, 2, 3], 3] After: [3, [3, 2, 3], 3] [3, [3, 2, 3], 3] ----------------------- '''   浅拷贝: 1.copy()方法

对于List来说,其第一层,是实现了深拷贝,但对于其内嵌套的List,仍然是浅拷贝。

因为嵌套的List保存的是地址,复制过去的时候是把地址复制过去了,嵌套的List在内存中指向的还是同一个。

old = [1,[1,2,3],3] new = old.copy() new[0] = 3 new[1][0] =3 ''' --------------------- Before: [1, [1, 2, 3], 3] [1, [1, 2, 3], 3] After: [1, [3, 2, 3], 3] [3, [3, 2, 3], 3] --------------------- '''   2.使用列表生成式

使用列表生成式产生新列表也是一个浅拷贝方法,只对第一层实现深拷贝。

old = [1,[1,2,3],3] new = [i for i in old] new[0] = 3 new[1][0] = 3 ''' ---------------------- Before [1, [1, 2, 3], 3] [1, [1, 2, 3], 3] After [1, [3, 2, 3], 3] [3, [3, 2, 3], 3] ---------------------- '''   3.for循环遍历

通过for循环遍历,将元素一个个添加到新列表中。这也是一个浅拷贝方法,只对第一层实现深拷贝。

old = [1,[1,2,3],3] new = [] for i in range(len(old)): new.append(old[i]) new[0] = 3 new[1][0] = 3 ''' ----------------------- Before: [1, [1, 2, 3], 3] [1, [1, 2, 3], 3] After: [1, [3, 2, 3], 3] [3, [3, 2, 3], 3] ----------------------- '''   4.使用切片

通过使用 [ : ] 切片,可以浅拷贝整个列表,同样的,只对第一层实现深拷贝。

old = [1,[1,2,3],3] new = old[:] new[0] = 3 new[1][0] = 3 ''' ------------------ Before: [1, [1, 2, 3], 3] [1, [1, 2, 3], 3] After: [1, [3, 2, 3], 3] [3, [3, 2, 3], 3] ------------------ '''

 

深拷贝:

如果用deepcopy()方法,则无论多少层,无论怎样的形式,得到的新列表都是和原来无关的,这是最安全最清爽最有效的方法。

需要import copy

import copy old = [1,[1,2,3],3] new = copy.deepcopy(old) new[0] = 3 new[1][0] = 3 ''' ----------------------- Before: [1, [1, 2, 3], 3] [1, [1, 2, 3], 3] After: [1, [1, 2, 3], 3] [3, [3, 2, 3], 3] ----------------------- '''

 



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有