美文网首页
简介深浅拷贝

简介深浅拷贝

作者: 零下六点半 | 来源:发表于2018-08-08 22:16 被阅读7次

深浅拷贝

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])
# 如果元组中的子对象有可变类型,是引用对对方的地址,在浅拷贝的时候回随之改变

相关文章

  • 简介深浅拷贝

    深浅拷贝 python 直接赋值,浅拷贝和深拷贝 直接赋值 其实就是对象的引用 (可以理解成浅拷贝) 浅拷贝: 拷...

  • 2018-08-29

    深浅拷贝 1.根据拷贝内容的不同,分为深浅拷贝 深拷贝:内容...

  • js的深浅拷贝

    js的深浅拷贝可以分为数组的深浅拷贝和对象的深浅拷贝 一、数组的深浅拷贝如果只是简单的将数组中的元素付给另外一个数...

  • Python—浅拷贝与深拷贝

    浅拷贝 深拷贝 深浅拷贝的作用

  • 深浅拷贝

    先来了解一下这些:在js中变量类型基本分为两种:基本数据类型和引用数据类型;基本类型:Underfied Null...

  • 深浅拷贝

    浅拷贝是对一个对象的顶层拷贝。通俗的理解就是:拷贝了引用,并没有拷贝内容。 深拷贝是对于一个对象所有层次的拷贝(递...

  • 深浅拷贝

    深浅拷贝.copy 浅拷贝 这是一个方法,浅拷贝修改可变类型是会将原数据也一块修改 Copy.deepcopy 深...

  • 深浅拷贝

    1:is 和 ==的区别 is 是比较两个引用是否指向了同一个对象(地址引用比较)。== 是比较两个对象是否相等。...

  • 深浅拷贝

    函数的传递,与matlab不同,具有以下特点: 1.直接赋值会带来不同ID,例如,a=2,b=2 2.传递引用赋值...

  • 深浅拷贝

    最近一直被问到深浅拷贝的问题。自己也确实不太清楚怎么回事,现在来研究一下。 什么是深浅拷贝 浅拷贝:指针拷贝,不会...

网友评论

      本文标题:简介深浅拷贝

      本文链接:https://www.haomeiwen.com/subject/eidfbftx.html