首页
学习
活动
专区
圈层
工具
发布
30 篇文章
1
一、python学习笔记-基本数据类型-字符串(二)
2
一、python学习笔记-基本数据类型-列表
3
一、python学习笔记-基本数据类型-字符串(一)
4
一、python学习笔记-基本数据类型-元组
5
一、python学习笔记-基本数据类型-字典
6
一、python学习笔记-基本数据类型-集合
7
一、python学习笔记-基本数据类型-可变和不可变数据类型
8
一、python学习笔记-基本数据类型-深浅拷贝(一)
9
一、python学习笔记-基本数据类型-深浅拷贝(二)
10
二、python学习笔记-循环判断-for语句
11
二、python学习笔记-循环判断-while语句
12
二、python学习笔记-循环判断-continue语句
13
三、python学习笔记-异常处理-异常
14
三、python学习笔记-异常处理-异常处理
15
四、python学习笔记-文件操作-文件操作(一)
16
四、python学习笔记-文件操作-文件操作(二)
17
一、python学习笔记-基本数据类型-数字
18
二、python学习笔记-循环判断-break语句
19
四、python学习笔记-文件操作-文件操作流程
20
二、python学习笔记-循环判断-if语句
21
五、python学习笔记-函数-函数基础(一)
22
五、python学习笔记-函数-函数基础(二)
23
五、python学习笔记-函数-函数基础(三)
24
五、python学习笔记-函数-函数基础(四)
25
五、python学习笔记-函数-函数基础(五)
26
五、python学习笔记-函数-函数基础(六)
27
五、python学习笔记-函数-函数基础(七)
28
五、python学习笔记-函数-函数基础(八)
29
五、python学习笔记-函数-函数基础(九)
30
五、python学习笔记-函数-装饰器(一)

一、python学习笔记-基本数据类型-深浅拷贝(一)

代码语言:javascript
复制
"""定义
在Python中对象的赋值其实就是对象的引用。当创建一个对象,把它赋值给另一个变量的时候,python并没有拷贝这个对象,只是拷贝了这个对象的引用而已。
浅拷贝:拷贝了最外围的对象本身,内部的元素都只是拷贝了一个引用而已。也就是,把对象复制一遍,但是该对象中引用的其他对象我不复制(快捷方式)
深拷贝:外围和内部元素都进行了拷贝对象本身,而不是引用。也就是,把对象复制一遍,并且该对象中引用的其他对象我也复制。(复制)
"""

"""术语解释
1、变量:是一个系统表的元素,拥有指向对象的连接空间 
2、对象:被分配的一块内存,存储其所代表的值 
3、引用:是自动形成的从变量到对象的指针 
4、注意:类型(int类型,long类型(python3已去除long类型,只剩下int类型的数据))属于对象,不是变量 
5、不可变对象:一旦创建就不可修改的对象,包括字符串、元组、数字 
6、可变对象:可以修改的对象,包括列表、字典。
"""

"""应用范围
1、切片可以应用于:列表、元组、字符串,但不能应用于字典。 
2、深浅拷贝,既可应用序列(列表、元组、字符串),也可应用字典。
"""

"""深浅拷贝的作用
1、减少内存的使用 
2、以后在做数据的清洗、修改或者入库的时候,对原数据进行复制一份,以防数据修改之后,找不到原数据。
"""

"""对于不可变对象的深浅拷贝
不可变对象类型,没有被拷贝的说法,即便是用深拷贝,查看id的话也是一样的,如果对其重新赋值,也只是新创建一个对象,替换掉旧的而已。
一句话就是,不可变类型,不管是深拷贝还是浅拷贝,地址值和拷贝后的值都是一样的。
"""
import copy

a = (1, 2, 3)
print("=====第一种=号浅拷贝=====")
b = a
print(a)
print(b)
print(id(a))
print(id(b))
print("=====另一种copy浅拷贝===")
b = copy.copy(a)
print(a)
print(b)
print(id(a))
print(id(b))
print("=====深拷贝=====")
b = copy.deepcopy(a)
print(a)
print(b)
print(id(a))
print(id(b))

"""对于可变对象深浅拷贝
=浅拷贝:值相等,地址相等 
copy浅拷贝:值相等,地址不相等 
deepcopy深拷贝:值相等,地址不相等
"""

a = [1, 2, 3]
print("=====第一种=号浅拷贝=====")
b = a
print(a)
print(b)
print(id(a))
print(id(b))
print("=====另一种copy浅拷贝===")
b = copy.copy(a)
print(a)
print(b)
print(id(a))
print(id(b))
print("=====深拷贝=====")
b = copy.deepcopy(a)
print(a)
print(b)
print(id(a))
print(id(b))

"""总结
1、深浅拷贝都是对源对象的复制,占用不同的内存空间。
2、不可变类型的对象,对于深浅拷贝毫无影响,最终的地址值和值都是相等的。
3、可变类型: 
=浅拷贝: 值相等,地址相等 
copy浅拷贝:值相等,地址不相等 
deepcopy深拷贝:值相等,地址不相等
"""
下一篇
举报
领券