拷贝python对象,浅拷贝和深拷贝

对象赋值实际上是简单的对象引用。也就是说创建一个对象然后赋值给另一个变量的时候,python并没有拷贝这个对象,而是拷贝了这个对象的引用。

浅拷贝:浅拷贝的是对象本身,但是内容是原来对象的引用。(拷贝对象本身是新的但是内容不是新的)。

拷贝对象的方式:

  • 切片操作法
  • 工厂方法(利用工厂函数)
  • 使用copy模块的copy函数

来看代码:

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

"""输出结果为"""
"""a,b的id相同,c与a,b的id不同"""
### a = ['a','b','c',[1,2,3,4],'d']
### b = ['a','b','c',[1,2,3,4],'d']
"""浅拷贝只会拷贝第一层而不会拷贝内容的第二层"""
### c = ['a','b','c',[1,2,3,4]]


"""浅拷贝后,改变原始对象中不可变类型元素的值,不会影响拷贝对象"""
a[1] = 't'
print(a,b,c)
### a = ['a','t','c',[1,2,3,4],'d']
### b = ['a','t','c',[1,2,3,4],'d']
### c = ['a','b','c',[1,2,3,4]]

 

深拷贝:复制的不仅是对象本身而且还有引用(创建一个新的容器对象,包含原有对象元素)

深拷贝的方式:

  • 需要用到copy中的copy.deepcopy()函数。
import copy

a = ['a','b','c',[1,2,3]]
b = copy.deepcopy(a)

a.append('d')
a[3].append(4)

print(id(a),id(b))
print(a,b)

"""a,b的id值不相同"""
# a = ['a','b','c',[1,2,3,4],'d']
# b = ['a','b','c']

深浅拷贝的作用:

减少内存的使用

数据修改时对原数据进行备份以防数据丢失

对于不可变对象的深浅的拷贝(字符串,元组,数字)

不可变对象类型,没有被拷贝的说法,即使用深拷贝也是拷贝了他的引用。

对于不可变对象无论是浅拷贝还是深拷贝地址都和拷贝之前的一样。

对于可变对象的深浅拷贝

“=”引用 值与地址都相等

copy浅拷贝 值相等地址不相等

deepcopy深拷贝 值相等地址不相等

核心模块copy:

深拷贝和浅拷贝都可以在copy模块中找到。其实copy模块中就有两个函数可用:copy()进行浅拷贝操作,而deepcopy()进行深拷贝操作。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值