简介深浅拷贝

深浅拷贝

python 直接赋值,浅拷贝和深拷贝

直接赋值

其实就是对象的引用 (可以理解成浅拷贝)

浅拷贝:

拷贝父类,不会 拷贝父类对象的 内部子对象

重要
使用列表内置的copy方法,是将新列表中的元素指向了与原列表相同的内存空间。但是,如果列表中嵌套了列表,拷贝后的列表中嵌套的列表元素指针,指向原列表中嵌套列表的整体地址,而不是指向嵌套列表中元素的内存地址。

深拷贝:

完全拷贝了父类对象和其子对象

实例A

# 浅拷贝
a = {1:[1,2,3]}
b= a.copy() 
# a={1:[1,2,3]} b={1:[1,2,3]} a和b的地址也不一样
a[1].append(55)
# a={1:[1,2,3,55]} b={1:[1,2,3,55]}
# 浅拷贝不拷贝父类对象的子对象

实例B

# 深拷贝 ,导入copy模块
import copy
a = {1:[1,2,3]}
c = copy.deepcopy(a)
# a= {1:[1,2,3]}, c={1:[1,2,3]}
a[1].append(99)
# a = {1:[1,2,3,99]}
# c = {1:[1,2,3]}
# 深拷贝完全拷贝了父类对象和父类对象的子对象

实例C(综合)

import copy
a = [1, 2, 3, 4, ['a', 'b']] #原始对象
b = a                       #赋值,传对象的引用
c = copy.copy(a)            #对象拷贝,浅拷贝
d = copy.deepcopy(a)        #对象拷贝,深拷贝
a.append(5)                 #修改对象a
a[4].append('c')            #修改对象a中的['a', 'b']数组对象

# 输出结果
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']]

深浅拷贝对元组的实例

import copy
a = (1,2,3)
b = copy.copy(a)
c = copy.deepcopy(a)
(id(a),id(b),id(c)一样的)

# 如果元组里面有可变的列表时
a = (1,2,[3,4,5])
b = copy.copy(a)
c = copy.deepcopy(a)
a[2].append(99)
# 输出
a=(1,2,[3,4,5,99])
b=(1,2,[3,4,5,99])
c=(1,2,[3,4,5])
# 如果元组中的子对象有可变类型,是引用对对方的地址,在浅拷贝的时候回随之改变
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 包(lib)、模块(module) 在Python中,存在包和模块两个常见概念。 模块:编写Python代码的py...
    清清子衿木子水心阅读 3,896评论 0 27
  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 11,573评论 1 32
  • 一、Python简介和环境搭建以及pip的安装 4课时实验课主要内容 【Python简介】: Python 是一个...
    _小老虎_阅读 6,280评论 0 10
  • 亲爱的老爸: 你好吗?我很想你呢… 今天特别忙,安排得满当当的。上午跑了俩派出所,想看的材料还是没能看,得法院发调...
    老爸我很想你阅读 166评论 0 0
  • 你说的话,我能理解,也能接受,可我还是很难过~
    君_e937阅读 233评论 2 2

友情链接更多精彩内容