Python高级编程-深拷贝与浅拷贝

1. ==,is的使用

这里写图片描述

这里写图片描述
总结:
 • is 是比较两个引用是否指向了同一个对象(引用比较)。
 • == 是比较两个对象是否相等。

2. 浅拷贝、深拷贝

python中的深拷贝和浅拷贝和java里面的概念是一样的,所谓浅拷贝就是对引用的拷贝,所谓深拷贝就是对对象的资源的拷贝。
首先,对赋值操作我们要有以下认识:
 1.赋值是将一个对象的地址赋值给一个变量,让变量指向该地址( 旧瓶装旧酒 )。
 2.修改不可变对象(str、tuple)需要开辟新的空间
 3.修改可变对象(list等)不需要开辟新的空间

2.1浅拷贝

浅拷贝是对于一个对象的顶层拷贝,仅仅复制了容器中元素的地址
通俗的理解是:拷贝了引用,并没有拷贝内容
这里写图片描述
这里写图片描述
总结:
 浅拷贝是在另一块地址中创建一个新的变量或容器,但是容器内的元素的地址均是源对象的元素的地址的拷贝。也就是说新的容器中指向了旧的元素( 新瓶装旧酒 )。

2.2 深拷贝

深拷贝是对于一个对象所有层次的拷贝(递归),完全拷贝了一个副本,容器内部元素地址都不一样
这里写图片描述

这里写图片描述
总结:
 深拷贝是在另一块地址中创建一个新的变量或容器,同时容器内的元素的地址也是新开辟的,仅仅是值相同而已,是完全的副本。也就是说( 新瓶装新酒 )。
 

2.3 拷贝的其他方式

浅拷贝对不可变类型和可变类型的copy不同
●对于列表[]来说:

import copy
a = [11,22,33]
b = copy.copy(a)
print(b)
print(id(a),id(b))

a.append(44)
print(a)
print(b)

运行结果:
这里写图片描述

●对于元组()来说:

import copy
a = (11,22,33)
b = copy.copy(a)
print(b)
print(id(a),id(b))

运行结果:
这里写图片描述

对字典{}来说:

a=dict(name="zhangsan",age=27)
b=a.copy()
print(b)
print(id(a),id(b))

运行结果:
这里写图片描述

• 分片表达式可以赋值一个序列

a='abc'
b=a[:]
print(b)
#b='abc'

• 有些内置函数可以生成拷贝(list)

a = list(range(10))
b = list(a)
print(a)
print(b)
print(id(a),id(b))

运行结果:
这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值