python基础--浅拷贝与深拷贝

**1、浅拷贝--使用等号进行赋值**
直接使用等号进行赋值,是浅拷贝,两个list的地址一样
lis1 = [1,2,3]           lis1存的是lis1的内存地址,并不是[1,2,3]
lis2=lis1                lis2=lis1时,lis2也就是等于lis1的内存地址,所以说操作lis1时,lis2中的值也会发生变化
lis1.append(4)
print('lis1',id(lis1),lis1)
print('lis2',id(lis2),lis2)

在这里插入图片描述
2、浅拷贝–使用切片进行赋值

lis1 = [1,2,3]
lis2=lis1[:]
lis3=[5,6]
lis1.append(4)
lis1.append(lis3)
print('lis1',id(lis1),lis1)
print('lis2',id(lis2),lis2)

在这里插入图片描述

3、浅拷贝–使用list自带的copy函数
虽然lis1和lis2的地址不一样,但是这种方式也是浅拷贝
copy后的内容地址不一样时,不一定就是深拷贝,如果地址不变的话,一定是浅拷贝
通过list.copy复制过来的内容,删除的时候,可以同步到lis2,但是如果lis1中包含字典时,对lis1中的value进行修改的时候,也会同步到lis2,list.copy表层是深拷贝,往深了看,还是浅拷贝

lis1 = [1,2,3]
lis2=lis1.copy()
lis3=[5,6]
lis1.append(4)
lis1.append(lis3)
print('lis1',id(lis1),lis1)
print('lis2',id(lis2),lis2)

在这里插入图片描述

4、浅拷贝–使用copy.copy

import copy

lis1 = [1,2,3]
lis2 = copy.copy(lis1)
print(‘lis1’,id(lis1),lis1)
print(‘lis2’,id(lis2),lis2)

5、深拷贝–使用copy中的deepcopy()
python的深拷贝只有copy.deepcopy,其他的都是浅拷贝

import copy
lis1 = [1,2,3]
lis2=copy.deepcopy(lis1)
lis3=[5,6]
lis1.append(4)
lis1.append(lis3)
print('lis1',id(lis1),lis1)
print('lis2',id(lis2),lis2)

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值