python 列表深拷贝_python列表--浅拷贝与深拷贝的区别

首先得说说列表为什么需要拷贝,就是为了解决简单赋值操作,传地址的问题,因为赋值过去的列表,其实指向的是同一个地址,问题说明看代码

a = [1,2,3]

b = a

# list类型,简单赋值操作,是传地址

print(id(a))

print(id(b))

b[1] = 6

print(b)

print(a)

执行结果,输出的是:

2460317409864

2460317409864

[1, 6, 3]

[1, 6, 3]

#同一地址,修改b的列表,a也会同时改变。

为了解决以上问题,list赋值需要采用copy函数

a = [1,2,3]

b = a.copy()

print(id(a))

print(id(b))

b[1] = 6

print(b)

print(a)

但是由于copy只是浅拷贝,其只拷贝一层

深拷贝跟浅拷贝的区别

# 出现下列问题的原因是,copy‘函数是个浅拷贝函数,即只拷贝一层内容

# 深拷贝需要使用copy模块

a = [1,2,3,[10,20,30]]

b = a.copy()

print(id(a))

print(id(b))

print('*' * 20)

print(id(a[3]))

print(id(b[3]))

a[3][2]=666

print(a)

print(b)

以上代码输出结果为:

2963694903944

2964112968904

********************

2963694903880

2963694903880

[1, 2, 3, [10, 20, 666]]

[1, 2, 3, [10, 20, 666]]

接下来演示一下深拷贝

import copy

a = [1,2,3,[10,20,30]]

b = copy.deepcopy(a) #这里不一样哦

print(id(a))

print(id(b))

print('*' * 20)

print(id(a[3]))

print(id(b[3]))

a[3][2]=666

print(a)

print(b)

#输出结果:

2620494013064

2620883635400

********************

2620494013000

2620495283144

[1, 2, 3, [10, 20, 666]]

[1, 2, 3, [10, 20, 30]]

#这才是我们想要得到的目的

不明白的可以自己实践操作试试

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值