python复制list以及深拷贝与浅拷贝

python复制list
一般采用
1.直接引用 a=b

速度 切片>list()>copy.copy()
2.切片法 a=b[:]
3.list列表构造函数 a=list(b)
4.a=copy.copy(b)
#都列表的子列表都是指引到同一个对象上

5.深拷贝a=copy.deepcopy(b)
列表的子列表也会被拷贝
速度最慢,慢得离谱,是切片的300倍

python复制字典
一般采用
1.直接引用 a=b

3.a=dict.copy(b)
4.a=copy.copy(b)

# 深拷贝 和 浅拷贝,都会创建一个新的对象,但是浅拷贝创建的对象所用的子对象和之前一样,深拷贝则全部不一样
# 浅的意思就是干的活少,只是指向了这个对象,深就是干的活多,全部拿过来

import copy

a = [1, 2, 3, 4, ['a', 'b']]  # 原始对象

b = a  # 赋值,传对象的引用
c = copy.copy(a)  # 对象拷贝,浅拷贝 等同于 c=a.copy()/list(a)/a[:]/a*1
d = copy.deepcopy(a)  # 对象拷贝,深拷贝

a.append(5)  # 修改对象a
a[4].append('c')  # 修改对象a中的['a', 'b']数组对象

print('a = ', a)
print('b = ', b)
print('c = ', c)
print('d = ', d)

print(id(a))
print(id(b))  # id(a)==id(b)
print(id(c))
print(id(d))

print("-"*50)

print(id(a[0]))  # 相同数字的id肯定相同
print(id(b[0]))
print(id(c[0]))
print(id(d[0]))

print("-"*50)

print(id(a[4]))
print(id(b[4]))
print(id(c[4]))  # id(a[4]) == id(b[4])  == id(c[4])
print(id(d[4]))


结果如下:

a =  [1, 2, 3, 4, ['a', 'b', 'c'], 5]
b =  [1, 2, 3, 4, ['a', 'b', 'c'], 5]
c =  [1, 2, 3, 4, ['a', 'b', 'c']]
d =  [1, 2, 3, 4, ['a', 'b']]
2885025877384
2885025877384
2885025906120
2885025981064
--------------------------------------------------
1534112832
1534112832
1534112832
1534112832
--------------------------------------------------
2885025981640
2885025981640
2885025981640
2885025876680
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值