Pyhton =、浅拷贝以及深拷贝


三种操作不同只体现在不可变类型的修改上

1. =操作

两指针指向同一块内存地址, 一个改变都会改变

l1 = [1, 2, 3]
l2 = l1
print(l1, l2)
# [1, 2, 3] [1, 2, 3]

l2[0] = 4
print(l1, l2)
# [4, 2, 3] [4, 2, 3]

l2.append(4)
print(l1, l2)
# [1, 2, 3, 4] [1, 2, 3, 4]

2. 浅拷贝

  • 使用内置模块 copy.copy()
  • 切片操作也属于浅拷贝
  • 与=操作的区别在于, 浅拷贝会拷贝父对象, 也就是最外层的可变类型, 内部的子可变对象不会拷贝
  • 所以, 修改内部的可变类型子对象, 两个变量都会被改变
import copy

l1 = [1, [2], 3]
l2 = copy.copy(l1)
print(l1, l2)
# [1, [2], 3] [1, [2], 3]

# 可变元素中潜逃的可变元素修改, 则都会改变
l2[1].append(3)
print(l1, l2)
# [1, [2, 3], 3] [1, [2, 3], 3]

# 可变元素中的不可变元素更改, 则只会改变一个
l2[0] = 2
print(l1, l2)
# [1, [2, 3], 3] [2, [2, 3], 3]

# 可变元素中追加元素, 则只会改变一个
l2.append(4)
print(l1, l2)
# [1, [2, 3], 3] [2, [2, 3], 3, 4]

3. 深拷贝

完全拷贝, 拷贝父对象及子对象, 也就是说只有值相同, 地址完全不同, 所以修改任意一个元素, 都不会影响另一个内部的值

import copy

l1 = [1, [2], 3]
l2 = copy.deepcopy(l1)
print(l1, l2)
# [1, [2], 3] [1, [2], 3]


l2[1].append(3)
print(l1, l2)
# [1, [2], 3] [1, [2, 3], 3]

l2[0] = 2
print(l1, l2)
# [1, [2], 3] [2, [2, 3], 3]

l2.append(4)
print(l1, l2)
# [1, [2], 3] [2, [2, 3], 3, 4]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值