Python的赋值引用, 浅拷贝和深拷贝

简介: Python的赋值引用, 浅拷贝和深拷贝

前言


有个朋友昨天问了我这个问题, 刚好挺长时间没写博客了, 就顺便划划水


赋值引用


赋值引用其实就是最基本也是最常用的引用, 即:

a = [1, 2, 3]
b = a
a[0] = 2
print(b)   # [2, 2, 3]


就相当于下面的过程


20200227102759206.png

所以当b=a时, 其实就是将b指向a的内存地址, 当a改变的时候, b也会随之改变


浅拷贝


浅拷贝就是只复制一份最外层元素, 生成一个新的内存地址, 但是如果原元素里有子对象, 比如列表字典这种, 就还是会指向之前的内存地址


import copy
a = [1, 2, [3, 4]]
b = copy.copy(a)
a.append(5)
print(b)  # [1, 2, [3, 4]]
a[2].append(6)
print(a)  # [1, 2, [3, 4, 6], 5]
print(b)  # [1, 2, [3, 4, 6]]

20200227105420946.png


列表的切片就是浅拷贝


深拷贝


深拷贝其实就没啥说的了, 就是完全复制前对象, 跟前对象没有任何的关系

import copy
a = [1, 2, [3, 4]]
b = copy.deepcopy(a)
a.append(5)
print(b)  # [1, 2, [3, 4]]
a[2].append(6)
print(a)  # [1, 2, [3, 4, 6], 5]
print(b)  # [1, 2, [3, 4]]

20200227105834943.png

完全独立


补充


数字和字符串都是对源对象的引用, 即只是指向不同的内存地址

目录
相关文章
|
4月前
|
索引 Python
python语法错误赋值错误
【7月更文挑战第10天】
88 6
|
24天前
|
存储 Java 编译器
Python学习三:学习python的 变量命名规则,算数、比较、逻辑、赋值运算符,输入与输出。
这篇文章是关于Python编程语言中变量命名规则、基本数据类型、算数运算符、比较运算符、逻辑运算符、赋值运算符以及格式化输出与输入的详细教程。
18 0
Python学习三:学习python的 变量命名规则,算数、比较、逻辑、赋值运算符,输入与输出。
|
25天前
|
API 开发者 索引
Python中的省略号(Ellipsis)赋值方式
在Python中,省略号(`...`)是一种特殊对象,称为Ellipsis,虽不常用但在特定场景下非常实用,如函数占位、未实现方法示例及NumPy数组处理。本文通过示例介绍`a = ...`的用法。省略号类似于`None`,可用作代码结构的占位符,保持代码完整性和可读性,同时在API设计中标识待实现的方法。特别是在NumPy中,省略号用于表示多维数组的剩余维度,简化数组操作,提高代码灵活性和可读性。掌握这一技巧有助于提升Python编程能力。
|
3月前
|
数据处理 Python
python变量重新赋值
【8月更文挑战第4天】
169 6
|
3月前
|
API Python
python中copy模块的使用,深拷贝和浅拷贝
python中copy模块的使用,深拷贝和浅拷贝
26 0
|
4月前
|
Python
Python基础语法:运算符详解(算术运算符、比较运算符、逻辑运算符、赋值运算符)
运算符是Python编程中的重要组成部分,理解并熟练使用这些运算符有助于编写高效、简洁的代码。本文详细介绍了算术运算符、比较运算符、逻辑运算符和赋值运算符的使用方法,并通过综合示例展示了它们在实际编程中的应用。希望通过本文的介绍,您能更好地掌握Python中的运算符。
171 13
|
4月前
|
资源调度 分布式计算 DataWorks
DataWorks产品使用合集之如何使用Python UDF(User-Defined Function)来引用第三方模块
DataWorks作为一站式的数据开发与治理平台,提供了从数据采集、清洗、开发、调度、服务化、质量监控到安全管理的全套解决方案,帮助企业构建高效、规范、安全的大数据处理体系。以下是对DataWorks产品使用合集的概述,涵盖数据处理的各个环节。
|
4月前
|
Python
Python中变量赋值错误
【7月更文挑战第16天】
83 3
|
4月前
|
Python
python包引用方式总结
python包引用方式总结
41 0
|
4月前
|
Python
Python 中浅拷贝(copy)和深拷贝(deepcopy)
Python 中浅拷贝(copy)和深拷贝(deepcopy)