加入收藏 | 设为首页 | 会员中心 | 我要投稿 鹤壁站长网 (https://www.0392zz.cn/)- 分布式云、存储数据、视频终端、媒体处理、内容创作!
当前位置: 首页 > 综合聚焦 > 编程要点 > 语言 > 正文

Python列表复制有几种方式,有何不同?

发布时间:2022-03-15 14:00:53 所属栏目:语言 来源:互联网
导读:本文主要介绍Python列表复制的内容,而Python中列表的复制有直接赋值、浅复制和深复制这几种。下面我们来分别了解一下几种情况的使用和区别是什么。 直接赋值 a = [11, 22, 33] b = a print(id(a), id(b)) b[0]=1 print(a,b) 输出结果为如下所示,发现内存地
         本文主要介绍Python列表复制的内容,而Python中列表的复制有直接赋值、浅复制和深复制这几种。下面我们来分别了解一下几种情况的使用和区别是什么。
 
    直接赋值
a = [11, 22, 33]
b = a
print(id(a), id(b))
b[0]=1
print(a,b)
        输出结果为如下所示,发现内存地址没有发生变化,b只是a的引用,通过b更改列表的值时,a同时做修改。
  
 
 
    用切片赋值
a = [11, 22, 33]
b = a[:]
print(id(a), id(b))
b[0]=1
print(a,b)
        输出结果为如下所示,发现内存地址发生了变化,通过b更改列表的值时,对a没有任何的影响。
 
 
 
    copy()复制实现赋值
a = [11, 22, 33]
b = copy.copy(a)
print(id(a), id(b))
b[0]=1
print(a,b)
        输出结果为如下所示,发现内存地址发生了变化,通过b更改列表的值时,对a没有任何的影响。说明copy()复制的方式和切片的方式功能相同。
 
 
 
    deepcopy()复制实现赋值
a = [11, 22, 33]
b = copy.deepcopy(a)
print(id(a), id(b))
b[0]=1
print(a,b)
        输出结果为如下所示,发现在该实例中,deepcopy()和copy()的方式没有任何区别。
 
 
 
        那么浅复制和深复制有什么区别呢?继续看下面的实例测试。
 
    copy()和deepcopy()的区别
        6.1  copy()
a = [11, 22, 33, [1,2]]
b = copy.copy(a)
print(id(a), id(b))
b[3][0]=11
print(a,b)
        运行结果:
 
 
 
        6.2 deepcopy()
a = [11, 22, 33, [1,2]]
b = copy.deepcopy(a)
print(id(a), id(b))
b[3][0]=11
print(a,b)
        运行结果:
 
 
 
        通过上面的测试,发现当列表a中的元素包含子列表时:
 
        copy()方法为浅复制,没有复制子对象,当原始数据改变,子对象会改变;而deepcopy()方法包含对象里面的子对象的复制,当原始对象改变,不会造成深复制里任何子元素的改变。

(编辑:鹤壁站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读