python列表的赋值,浅复制和深复制

1.python列表的赋值

     赋值主要是设定了一个变量的引用,赋值主要方式是通过=,*。

a = [[]]*6
a[0].append(1)
a[5].append(2)
print(a)

  显示结果:[[1, 2], [1, 2], [1, 2], [1, 2], [1, 2], [1, 2]]

a = [1,2,[3]]
b = a
b.append(4)
print(a,id(a))
print(b,id(b))

       显示结果:

[1, 2, [3], 4] 2382876458056
[1, 2, [3], 4] 2382876458056

       显而易见,不论对于哪一个赋值的变量进行修改,由于引用的内存地址不变,最终修改的内存空间也不会变,所以最终显示结果如上图所示(如果赋值的是数值类型对象,会新建内存空间,形同深复制)

2.python列表的浅复制

       python列表的浅复制方式一般是copy()和列表切片。

import copy
a = [1,2,[3]]
b = copy.copy(a)
b.append(4)
b[2].append(4)
print(a,id(a))
print(b,id(b))

       显示结果:

[1, 2, [3, 4]] 1990656670856
[1, 2, [3, 4], 4] 1990656671112

a = [[1,3],{'a':'b'},4,{4}]
b = a[:]
b[0].append(5)
b[1]['c'] = 'd'
b[3].add(10)
b[2] = 6
print(a,id(a))
print(b,id(b))

       显示结果:

[[1, 3, 5], {'a': 'b', 'c': 'd'}, 4, {10, 4}] 2720397671496
[[1, 3, 5], {'a': 'b', 'c': 'd'}, 6, {10, 4}] 2720397671624

       浅复制分析:python列表的浅复制对于列表中存在可变的可迭代对象如列表,集合,字典这样的存在也是引用的原对象的地址空间,所以会一同改变(此处不讨论不可变的可迭代对象的引用)。对于列表中存在的数值型数据浅复制会直接创建新的地址空间用以保存。

3.python列表的深赋值

       python列表的深复制就我已知只有copy.deepcopy()一种了。

import copy
a = [1,2,[3]]
b = copy.deepcopy(a)
b.append(4)
b[2].append(4)
print(a,id(a))
print(b,id(b))

        显示结果:

[1, 2, [3]] 2286733180040
[1, 2, [3, 4], 4] 2286733180296

        深复制分析:python列表的深复制是直接新建一个内存空间将原列表的所有内容全部复制。不论哪一个发生改变都不会对另一个造成影响。

 

        本人才疏学浅,如果以上内容存在思虑不周或有误之处还望不吝指点。

转载于:https://www.cnblogs.com/dfc001/p/11526151.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值