首页 > 编程语言 >python笔记:赋值,浅拷贝和深拷贝

python笔记:赋值,浅拷贝和深拷贝

时间:2024-07-18 11:29:07浏览次数:14  
标签:python 创建 99 对象 print 拷贝 赋值

在 Python 中,变量赋值、浅拷贝和深拷贝在处理对象时有不同的行为和应用场景。以下是它们的详细区别:

1. 赋值

赋值操作只是创建了一个新的引用(别名)来指向同一个对象。也就是说,赋值操作并不创建新的对象,原始对象和赋值后的变量指向同一块内存区域。

a = [1, 2, 3]
b = a  # b 是 a 的引用
b[0] = 99

print("a:", a)  # 输出: [99, 2, 3]
print("b:", b)  # 输出: [99, 2, 3]

如上所示,修改 b 的内容也会影响到 a,因为它们指向同一个对象。

2. 浅拷贝

浅拷贝创建了一个新的对象,但并不递归地复制子对象。新的对象包含了对原始对象中子对象的引用,因此修改新对象的子对象也会影响到原始对象。

import copy

a = [1, 2, [3, 4]]
b = copy.copy(a)  # 创建 a 的浅拷贝
b[2][0] = 99

print("a:", a)  # 输出: [1, 2, [99, 4]]
print("b:", b)  # 输出: [1, 2, [99, 4]]

如上所示,修改 b 的子对象也会影响到 a,因为浅拷贝只是复制了对子对象的引用。

3. 深拷贝

深拷贝创建了一个新的对象,并且递归地复制所有的子对象。新对象和原始对象完全独立,修改新对象不会影响到原始对象。

import copy

a = [1, 2, [3, 4]]
b = copy.deepcopy(a)  # 创建 a 的深拷贝
b[2][0] = 99

print("a:", a)  # 输出: [1, 2, [3, 4]]
print("b:", b)  # 输出: [1, 2, [99, 4]]

如上所示,修改 b 的子对象不会影响到 a,因为深拷贝创建了完全独立的对象。

总结

  • 赋值:创建一个新的引用,原始对象和新变量指向同一个对象。
  • 浅拷贝:创建一个新的对象,但只复制了对象的顶层,子对象仍然是原始对象的引用。
  • 深拷贝:创建一个新的对象,并递归地复制所有子对象,新对象和原始对象完全独立。

标签:python,创建,99,对象,print,拷贝,赋值
From: https://www.cnblogs.com/lmc7/p/18309163

相关文章

  • 如何让Python爬虫在遇到异常时继续运行
    概述在数据收集和数据挖掘中,爬虫技术是一项关键技能。然而,爬虫在运行过程中不可避免地会遇到各种异常情况,如网络超时、目标网站变化、数据格式不一致等。如果不加以处理,这些异常可能会导致爬虫程序中断,影响数据采集效率和完整性。本文将概述如何使用Python编写一个健壮的爬......
  • 【2024版】超详细Python+Pycharm安装保姆级教程,Python+Pycharm环境配置和使用指南,看完
    目录一、Python开发环境配置1.Python下载与安装二、PyCharm安装+运行测试+汉化1.PyCharm下载及安装2.解释器配置及项目测试3.PyCharm汉化本文将从Python解释器安装到Pycharm专业版安装和配置汉化等使用都进行了详细介绍,希望能够帮助到大家。Python解释器&Pycharm安......
  • 七、python函数基础
    文章目录学习目标一、函数的介绍二、函数的参数三、函数的返回值四、函数的注释五、函数调用函数六、函数高级6.1全局变量和局部变量6.2函数多个返回值6.3默认参数的使用6.4可变参数的使用6.5可变数据类型和不可变数据类型6.6函数的注意事项......
  • 五、python列表
    文章目录学习目标一、列表的基本使用二、列表的遍历2.1while循环遍历2.2for...in循环遍历三、列表的排序3.1交换两个变量的值3.2冒泡排序3.3列表的排序与反转方法四、列表的复制4.1可变数据类型与不可变数据类型4.2列表的复制五、列表......
  • 【Python】pyppeteer 简单使用2
    importsyssys.path.append("/home/user/.local/lib/python3.9/site-packages")#将包的路径添加到环境变量importasynciofrompyppeteerimportlaunchfrompyppeteer.errorsimportTimeoutErrorfrompyppeteer_stealthimportstealth#反检测模块,隐藏浏览器特征widt......
  • Java语言,MySQL数据库;基于Node+Vue的健康信息管理系统的设计与实现32355(免费领源码)计算
    Node.js健康信息管理系统的设计摘要在如今IT技术快速发展和Internet广泛应用的时代,电子和网络技术给人们生活带来了便利,同时也会直接或间接损害人们的健康。所以,本次的毕业设计创作的意义就是通过信息化的统一管理,给用户录入和查看健康信息提供了方便。本设计主要实现集人......
  • 量化交易策略:波动性指标Keltner通道(附python代码)
    Keltner通道是由著名技术分析师ChesterW.Keltner在上个世纪60年代发明的一种技术指标。它基于价格和某种市场波动性度量(通常为移动平均)之间的关系,用于预测价格趋势的变化。Keltner通道的上下轨分别表示了价格的上限和下限,反映了市场在一定周期内的波动范围。这使得Keltner......
  • 6个强大且流行的Python爬虫库,强烈推荐!
    Python中有非常多用于网络数据采集的库,功能非常强大,有的用于抓取网页,有的用于解析网页,这里介绍6个最常用的库。1.BeautifulSoupBeautifulSoup是最常用的Python网页解析库之一,可将HTML和XML文档解析为树形结构,能更方便地识别和提取数据。BeautifulSoup可以自动将输入......
  • 【python学习】第三方库之tensorflow的定义、功能、使用场景、代码示例和解释
    引言tensorFlow是一个开源的软件库,最初由GoogleBrain团队的研究员和工程师开发,用于数值计算和大规模机器学习tensorFlow提供了丰富的API来支持各种计算任务,并且能够轻松地在多种计算设备上进行部署,包括CPU、GPU和TPU文章目录引言一、安装`tensorflow`第三方......
  • python+flask计算机毕业设计音乐推荐系统(程序+开题+论文)
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容研究背景随着数字音乐产业的蓬勃发展,音乐已成为人们日常生活中不可或缺的一部分。面对海量的音乐资源,用户往往难以从中快速找到符合个人喜好的音乐......