Python深拷贝与浅拷贝总结

现有一个列表a如下,想对其进行复制或者拷贝:

a = [[1, 2, 3], [4, 5, 6]]

1. 引用

将a的引用赋值给b:

b = a

可以认为不是拷贝,只是将a的引用给了b(起了个别名),它们指向的是同一个内存。改变a或者b中的某一个,另外一个都会发生相应的改变。
示例:

a = [[1, 2, 3], [4, 5, 6]]
b = a
a[0] = 1
print(b)
b[0] = 2
print(a)

输出:

[1, [4, 5, 6]]
[2, [4, 5, 6]]

2. 浅复制

浅复制的3种方式:

b = a[ : ]
b = a.copy()
b = [i for i in a]

目的是拷贝到另一块内存,但只复制了一层。改变一个列表的第一层元素,另一个列表不会变,如a[0] = 1 ,b不会改变;但改变第二层则b发生改变,如a[0].append(7)。
示例:

a = [[1, 2, 3], [4, 5, 6]]
b = a.copy()
print(b)
a[0] = 1 # 相当于改变了a[0]的引用(指向),对b[0]是没影响的
print(b)
a[1].append(7) # a[1]和b[1]指向的都是同一个列表,a[1]改变,b[1]也改变
print(b)

输出:

[[1, 2, 3], [4, 5, 6]]
[[1, 2, 3], [4, 5, 6]]
[[1, 2, 3], [4, 5, 6, 7]]

3. 深复制

深复制:

b = copy.deepcopy(a)

深拷贝拷贝了对象的所有元素,包括多层嵌套的元素。深拷贝之后,两者互不影响。
示例:

import copy
a = [[1, 2, 3], [4, 5, 6]]
b = copy.deepcopy(a)
a[1].append(7) #改变a的第二层,b也不会受影响
print(b) 

输出:

[[1, 2, 3], [4, 5, 6]]

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值