python列表浅复制_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列表的深复制是直接新建一个内存空间将原列表的所有内容全部复制。不论哪一个发生改变都不会对另一个造成影响。

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值