python-深拷贝与浅拷贝

最近遇到这个深浅拷贝的问题,以前看过结果太久没用忘了,现在做个笔记。

Python -浅拷贝与深拷贝分析

  • 对象的复制:a=[1,2] ; b=a
  • 浅拷贝:import copy ; a=[1,2] ; b=copy.copy(a)
  • 深拷贝:import copy ; a=[1,2]; b=copy.deepcopy(a)

对象的赋值

这里先介绍下python中的可变对象和不可变对象

  • 不可变对象:该对象所指向的内存中的值不能被改变,数值类型(int和float)、字符串str、元组tuple
  • 可变对象:,该对象所指向的内存中的值可以被改变

对象的赋值:对象引用的传递,原始对象改变,被赋值的也会变。

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

输出结果:
[1, 6, 3] [1, 6, 3]

a和b其实都指向内存中的同一对象[1,2]

浅拷贝

浅拷贝是复制了父对象,子对象还是共用的,相当于一个大箱子a(父对象)里装了很多小箱子(子对象),浅拷贝是另外复制了一个大箱子b,里面的小箱子的内容没有复制,和a共用。因此在a里增加(删除)小箱子,b不会变,但是修改a小箱子中内容,b会改变。

深拷贝

深拷贝:新的大箱子和小箱子,互不影响,a的任何改变不会影响b。
例1:

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

b = a                       #赋值,传对象的引用
c = copy.copy(a)            #对象拷贝,浅拷贝
d = copy.deepcopy(a)        #对象拷贝,深拷贝

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

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

输出是:

('a = ', [1, 2, 3, 4, ['a', 'b', 'c'], 10, 5])
('b = ', [1, 2, 3, 4, ['a', 'b', 'c'], 10, 5])
('c = ', [1, 2, 3, 4, ['a', 'b', 'c'], [1,2]])
('d = ', [1, 2, 3, 4, ['a', 'b'], [1,2])

例2:

import copy
a={'a':1,'b':[1,2]}
b=copy.copy(a)
a['a']=2
a['b'][1]=6

print(a,b)

输出是:

{'a': 2, 'b': [1, 6]} {'a': 1, 'b': [1, 6]}

浅拷贝:换小箱子(a[5]=10)、增加小箱子(a.append(5))、删除小箱子都不改变,只有修改小箱子内容时候(a[4].append(‘c’))会改变
浅拷贝:不会改变

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值