Python基础知识点——深拷贝、浅拷贝

预备知识一——python的变量及其存储

  1. python的一切变量都是对象,变量的存储,采用了引用语义的方式,存储的只是一个变量的值所在的内存地址,而不是这个变量的只本身
  2. 不管多么复杂的数据结构,浅拷贝都只会copy一层。 理解:两个人公用一张桌子,只要桌子不变,桌子上的菜发生了变化两个人是共同感受的。

copy模块用于对象的拷贝操作。

该模块只提供了两个主要的方法:copy.copy与copy.deepcopy,分别表示浅拷贝与深拷贝

浅copy与deepcopy

  • 浅拷贝: 不管是多么复杂的数据结构,浅拷贝只会拷贝第一层. 浅拷贝是对于一个对象的顶层拷贝 通俗的理解是:拷贝了引用,并没有拷贝内容
  • 深拷贝:会完全复制原变量的所有数据(递归性质的拷贝),在内存中生成一套完全一样的内容,我们对这两个变量中的一个进行任意修改都不会影响另一个变量

浅拷贝总结:
浅拷贝是对于一个对象的顶层拷贝,相当于只拷贝了最浅的一层或者第一层。
通俗的理解是:拷贝了引用,并没有拷贝内容

深拷贝总结:深拷贝会完全复制原变量的所有数据(递归),在内存中生成一套完全一样的内容,我们对这两个变量中的一个进行任意修改都不会影响另一个变量。

注意点:
浅拷贝对不可变类型和可变类型的copy不同
copy.copy对于可变类型,会进行浅拷贝
copy.copy对于不可变类型,不会拷贝,仅仅是指向

import copy
sourceList = [1,2,3,[4,5,6]]
copyList = copy.copy(sourceList)
deepcopyList = copy.deepcopy(sourceList)

sourceList[3][0]=100

print(sourceList)           # [1, 2, 3, [100, 5, 6]]
print(copyList)             # [1, 2, 3, [100, 5, 6]]
print(deepcopyList)         # [1, 2, 3, [4, 5, 6]]

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值