【测试开发学习历程】python深拷贝和浅拷贝

目录

1、变量、对象和引用

2、对象的垃圾收集

3、共享引用(共享对象)

4、共享引用和相等

5、共享引用和在原位置修改

6、使用Python复制而不是创建引用可以避免原位置修改问题

7、浅拷贝和深拷贝

浅拷贝

深拷贝


1、变量、对象和引用

类型属于对象,而不是变量:变量名没有类型,对象才有类型,变量实质上是指向对象所在内存空间的指针,变量只是对对象的引用。 不同赋值,因为变量没有类型,所以实质上只是修改变量a为对不同类型的变量的引用。变量总是一个指向对象的指针,而不是可改变的内存区域的标签。给一个变量赋新值,并不是替换原始的对象,而是让这个变量去引用别的对象。通俗的讲就是一个变量被赋新值,只会影响这个变量,而不会影响其共享对象的变量。

a = 3
print(a)
# 输出为3

2、对象的垃圾收集

对象包括两个头部信息:类型标志位和引用计数器。 类型标志位指对象的类型,如int,str 引用计数器指当前引用该对象的数目,当数目为0时,对象的空间被自动回收。

a = 'hello python'
print(a)
a = 3  # --> 'hello python'被回收
print(a)

3、共享引用(共享对象)

两个变量同时引用同一对象

a = 'hello word'
b = a
print(a)
print(b)

4、共享引用和相等

== 比较两个被引用的对象是否具有相同的值 is 比较实现引用的指针是否相同,即是否引用同一对象,是否为共享引用。

a = [1, 2]
b = a
print(a == b)
print(a is b)
​
c = [1, 2]
d = [1, 2]
print(c is d)
print(c == d)

5、共享引用和在原位置修改

引用了一个在原位置上发生改变的对象,共享引用也同样改变。

list1 = [1, 2, 3, 4]
list2 = list1
print(list1)
print(list2)
​
list1 = "hello python"  # 如直接给list1赋新值,则list2不变
print(list1)
print(list2)

如改变list2所引用对象的一个元素,这类修改会在原位置上覆盖列表对象的某部分值。则list2改变,尽管实质上并未改变list1的值,list1引用了一个在原位置上发生改变的对象,也同样改变。

list1 = [1, 2, 3, 4]
list2 = list1
print(list1)
print(list2)
​
# list1 = "hello python"
# print(list1)
# print(list2)
list2[2] = 100
print(list1)
print(list2)

6、使用Python复制而不是创建引用可以避免原位置修改问题

  • 列表切片

# 列表切片
list1 = [1, 2, 3, 4]
list2 = list1[:]
print(list1)
print(list2)
​
list2[2] = 100
print(list1)
print(list2)

7、浅拷贝和深拷贝

浅拷贝

  • 浅拷贝:copy函数可用于复制列表或字典等可变值,复制后的列表和原列表是两个独立的列表。

    import copy
    list1 = [1,2,3]
    new_list = copy.copy(list1)
    new_list[0] = 0
    print("old = ",list1)
    print("new = ",new_list)

深拷贝

  • 深拷贝:如果要复制的列表中有列表,则使用deepcopy()函数完全复制。

    import copy
    list1 =[[1,2,3],['a','b','c']]
    new_list = copy.deepcopy(list1)  #使用深copy.
    new_list[0][0] = 0   # 如果不使用deepcopy修改值不成功。
    print("old = ",list1)
    print("new = ",new_list)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/814399.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

已解决java.nio.file.InvalidPathException: 无效路径异常的正确解决方法,亲测有效!!!

已解决java.nio.file.InvalidPathException: 无效路径异常的正确解决方法,亲测有效!!! 目录 问题分析 报错原因 解决思路 解决方法 检查路径格式 适配操作系统 验证文件名和长度 检查字符编码 测试资源存在性 总结 博主…

使用STM32驱动液晶显示屏

前言 在嵌入式系统中,使用STM32微控制器来驱动液晶显示屏(LCD)是一项常见的任务。本文将介绍如何使用STM32微控制器来控制LCD,并提供一些示例代码以帮助读者更好地理解这一过程。 了解液晶显示屏 液晶显示屏是一种常见的显示设…

array和vector

STL中既然有了vector为什么还需要array #include<iostream> using namespace std; #include<vector> #include<array> int main() {int a;array<int,10> arr;vector<int> vec(10);int* b new int(10);cout << "a的地址" <&…

云服务器环境web环境搭建之JDK、redis、mysql

一、Linux安装jdk&#xff0c;手动配置环境 链接: https://pan.baidu.com/s/1LRgRC5ih7B9fkc588uEQ1whttps://pan.baidu.com/s/1LRgRC5ih7B9fkc588uEQ1w 提取码: 0413 tar -xvf 压缩包名 修改配置文件/etc/profile 二、安装redis环境 方案一&#xff1a; Linux下安装配置r…

【2024年5月备考新增】《软考真题分章练习(含答案解析) - 18 管理科学-运筹学基础 (2)》

21、某种商品价格 P 变动与某指标 A 的变化具有很强的相关性,指标 A 的增长会导致 P 的降低,反之亦然。指标 A 和价格 P 的相关性系数是()。 A.0.18 B.0 C.0.98 D.-0.83 【答案】D 【解析】A 的增长会导致 B 的降低,反比关系,系数必然是一个负数。正比函数 y=kx,当 k>…

go语言并发编程(四) ——再探管道

单向管道 什么是单向管道 在Go语言中&#xff0c;管道有两种类型:双向管道与单向管道.双向管道指的是可以读也可以写,能在管道两边进行数据的读写操作&#xff0c;而单向管道指的是只能在管道的一边进行操作&#xff0c;我们手动创建一个只读/写的管道意义不大&#xff0c;一…

ISO体系介绍

ISO体系太多太乱&#xff0c;搞不清该做哪个&#xff1f;没关系&#xff01;今天就来给大家挨个解读一下&#xff0c;哪些企业应该做什么样的体系认证最合适。不花冤枉钱&#xff0c;也别漏掉了需要的证书啦&#xff01; 一、ISO9001质量管理体系 ISO9001标准是一个放之四海皆…

网站建设也会涉及商标侵权,需要注意些!

以前普推知产老杨碰到建站涉及知识产权侵权的&#xff0c;但是大多数是其它方面的&#xff0c;前几天看到某同行说由于给客户建设网站&#xff0c;由于网站名称涉及商标被起诉要索赔几十万。 当时同行给做网站时还看了下营业执照&#xff0c;上面的主体名称与网站名称也是一致…

上海计算机学会 2023年10月月赛 丙组T2 颁奖典礼(思维)

第二题&#xff1a;T2颁奖典礼 标签&#xff1a;思维题意&#xff1a; n n n个学生参加颁奖典礼&#xff0c;学号为 1 1 1到 n n n。学生根据获奖等第依次上台领奖。已知学号为 i i i的学生是第 a i a_i ai​个上台领奖的。输出学生上台领奖的学号顺序。题解&#xff1a;以第…

乡村智慧化升级:数字乡村打造农村生活新品质

目录 一、乡村智慧化升级的内涵与意义 二、乡村智慧化升级的具体实践 1、加强农村信息基础设施建设 2、推广智慧农业应用 3、提升乡村治理智慧化水平 4、丰富智慧乡村生活内容 三、数字乡村打造农村生活新品质的成果展现 1、农业生产效率与质量双提升 2、农民收入与消…

汽车标定技术(十九) -- 移植标定栈时主机厂、供应商应该做什么?(1)

目录 1. 供应商视角 1.1 确认需求 1.2 代码移植阶段 1.3 考虑标定参数实现方式

主干网络篇 | YOLOv8更换主干网络之VanillaNet | 华为方舟实验室提出全新轻量级骨干架构

前言:Hello大家好,我是小哥谈。华为方舟实验室所提出的VanillaNet架构克服了固有复杂性的挑战,使其成为资源受限环境的理想选择。其易于理解和高度简化的架构为高效部署开辟了新的可能性。广泛的实验表明,VanillaNet提供的性能与著名的深度神经网络和vision transformers相…

【数学】主成分分析(PCA)的详细深度推导过程

本文基于Deep Learning (2017, MIT)&#xff0c;推导过程补全了所涉及的知识及书中推导过程中跳跃和省略的部分。 blog 1 概述 现代数据集&#xff0c;如网络索引、高分辨率图像、气象学、实验测量等&#xff0c;通常包含高维特征&#xff0c;高纬度的数据可能不清晰、冗余&am…

开源项目one-api的k8s容器化部署(上)-- 制作镜像及部署准备

一、背景 最近需要对开源项目one-api进行k8s容器化部署&#xff0c;主要分以下几个步骤&#xff1a; 制作docker镜像申请mysql和redis数据库docker-compose部署方式k8s部署方式 整个的篇幅比较长&#xff0c;将会分成上下两篇来阐述。 二、制作docker镜像 开源项目one-api…

2024 年(第 12 届)“泰迪杯”C 题:竞赛论文的辅助自动评阅

一、问题背景 近年来我国各领域各层次学科竞赛百花齐放&#xff0c;层出不穷&#xff0c;学生参与度也越来越高。随着参赛队伍的增加&#xff0c;评阅论文的工作量急剧增加&#xff0c;这对评阅论文的人力要求也越来越大。因此引入机器辅助评阅成为竞赛主办方的现实需求。 在…

Linux的学习之路:9、冯诺依曼与进程(1)

摘要 本章主要是说一下冯诺依曼体系结构和进程的一部分东西。 目录 摘要 一、冯诺依曼体系结构 二、操作系统的概念 三、设计OS的目的 四、管理 五、进程的基本概念 六、PCB 七、在Linux环境下查看进程 八、使用代码创建进程 九、思维导图 一、冯诺依曼体系结构 如…

Linux adduser命令教程:如何添加新用户(附实例详解和注意事项)

Linux adduser命令介绍 adduser是Linux系统中的一个命令行工具&#xff0c;用于创建新的用户。它是useradd这个底层工具的一个更友好的前端。当添加新用户时&#xff0c;它还会在/home目录下创建用户目录。 Linux adduser命令适用的Linux版本 adduser命令在大多数Linux发行版…

5G Frequency Bands 频率分布

连接&#xff1a;https://www.5g-networks.net/5g-technology/5g-frequency-bands/

每日一题:两数之和

给定一个整数数组 nums 和一个整数目标值 target&#xff0c;请你在该数组中找出 和为目标值 target 的那 两个 整数&#xff0c;并返回它们的数组下标。 你可以假设每种输入只会对应一个答案。但是&#xff0c;数组中同一个元素在答案里不能重复出现。 你可以按任意顺序返回…

uniapp:uview-plus的一些记录

customStyle 并不是所有的组件都有customStyle属性来设置自定义属性&#xff0c;有的还是需要通过::v-deep来修改内置样式 form表单 labelStyle 需要的是一个对象 :labelStyle"{color: #333333,fontSize: 32rpx,fontWeight: 500}"dateTimePicker选择器设置默认值…