python----深浅拷贝

本文详细探讨了Python中深拷贝和浅拷贝的区别,通过实例展示了普通赋值、深拷贝以及浅拷贝在列表操作时的行为。重点在于解释了当原始列表及其子元素变化时,如何影响拷贝内容的特性。对于涉及多层嵌套的列表,深拷贝能确保拷贝内容独立于原始列表,而浅拷贝在子元素为复杂类型时只拷贝引用,导致原始列表变化时拷贝内容也会受影响。
摘要由CSDN通过智能技术生成

深浅拷贝的主要区别:当原始列表中子元素发生变化时,跟着变的是浅拷贝,反之则是深拷贝

因为在列表中嵌套着列表的情况下,浅拷贝只会拷贝第一层,深拷贝会逐层进行拷贝


1.普通赋值介绍

赋值:赋值的过程,类似于引用,原始的列表改变,赋值的变量也会改变

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

a.append(6)  #当原始列表a改变时,b也会跟着改变
print(a)  # [1, [2, 2, 2, 2], 3, 4, 5, 6]
print(b)  # [1, [2, 2, 2, 2], 3, 4, 5, 6]

2.深拷贝:原始列表怎么变,深拷贝的内容都不会变

import copy
c = [1,[2,2,2,2],3,4,5]
d = copy.deepcopy(c)
print(c)  # [1, [2, 2, 2, 2], 3, 4, 5]
print(d)  # [1, [2, 2, 2, 2], 3, 4, 5]

c.append(6)  # 当原始列表c发生改变时,d不会跟着变
print(c)  # [1, [2, 2, 2, 2], 3, 4, 5, 6]
print(d)  # [1, [2, 2, 2, 2], 3, 4, 5]

c[1].append(222)  # 当原始列表c中的子元素发生变化是,d也不会变
print(c)  # [1, [2, 2, 2, 2, 222], 3, 4, 5, 6]
print(d)  # [1, [2, 2, 2, 2], 3, 4, 5]

3.浅拷贝:原始列表中的子元素发生变化,拷贝内容才会发生变化

import copy
e = [1,[2,2,2,2],3,4,5]
f = copy.copy(e)
print(e)  # [1, [2, 2, 2, 2], 3, 4, 5]
print(f)  # [1, [2, 2, 2, 2], 3, 4, 5]

e.append(6)  #原始列表e发生改变,f不会变
print(e)  # [1, [2, 2, 2, 2], 3, 4, 5, 6]
print(f)  # [1, [2, 2, 2, 2], 3, 4, 5]

e[1].append(222)  #原始列表e中的子元素发生变化,f跟着变了
print(e)  # [1, [2, 2, 2, 2, 222], 3, 4, 5, 6]
print(f)  # [1, [2, 2, 2, 2, 222], 3, 4, 5]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值