文章目录
-
- 假设我以这样的方式创建一个3 x 5的二维数组: a = [[0] * 5] * 3 然后我修改a[2][3]a[2][3]a[2][3]的值为111: a[2][3] = 1 结果会发现数组aaa中第二维坐标为333的数全部被修改为了111,而没有发生“第一维坐标为222的数全部被改成了111” print(a) # [[0, 0, 0, 1, 0], [0, 0, 0, 1, 0], [0, 0, 0, 1, 0]]
- 这就涉及到了Python中的拷贝机制。 Python中的数据按照其是否可以更改,可以分为两类: 可变类型包括列表(list)、字典(dict)和集合(set) 不可变类型包括整数(int)、浮点数(float)、布尔值(bool)、元组(tuple)和字符串(str) 深拷贝: 对于不可变类型(例如整数)进行复制操作时,会产生一个新的对象。对新对象的更改不会对旧对象造成影响: a = 2 b = a b = 1 print(a, b) # 2 1 print(id(a), id(b)) # 2474931349840 2474931349808 # 不同 浅拷贝: 然而对于可变类型(例如列表)进行复制时,只会将对象的引用复制一份,它们实际指向同意对象。因此修改新的对象会对旧对象产生影响: a = [1, 2, 3] b = a b[2] = 0 print(a, b) # [1, 2, 0] [1, 2, 0] print(id(a), id(b)) # 2537310019904 2537310019904 # 相同 注意对新对象的修改是指修改对象中的一部分,而不是让新对象指向另一个对象 a = [1, 2, 3] b = a b[0] = 0 # 修改对象中的一部分,这时a = [0, 2, 3] b = [0] # b指向了一个新的对象,原来的对象并没有被修改,这时a = [0, 2, 3] 这就解释了前言中的问题: [0]∗5[0] * 5[0]∗5是将000复制为5份,000是不可变的整数,因此新列表[0,0,0,0,0][0, 0, 0, 0, 0][0,0,0,0,0]中的每个000都是独立的,修改其中一个000不会影响到其他000的值 但是[[0,0,0,0,0]∗3][[0, 0, 0, 0, 0] * 3][[0,0,0,0,0]∗3]是将[0,0,0,0,0][0, 0, 0, 0, 0][0,0,0,0,0]复制为5份,[0,0,0,0,0][0, 0, 0, 0, 0][0,0,0,0,0]是可变的列表,因此实质上是创建了333个指向[0,0,0,0,0][0, 0, 0, 0, 0][0,0,0,0,0]的对象,因此修改其中一个,另外两个也会随之变化。 但是: a = [0] * 5 for i in range(5):print(id(a[i]), end=' ') # 2977374300432 2977374300432 2977374300432 2977374300432 2977374300432 # 完全相同!!! print(id(a[0] == id(a[1]))) # True a[0] = 1 print(a) # [1, 0, 0, 0, 0] print(id(a[0])) # 2977374300464 print(id(a[1])) # 2977374300432 print(id(a[2])) # 2977374300432 print(id(a[0]) == id(a[1])) # False 也许是Py的优化?只有当修改不可变元素时才真的深拷贝?
- 可以研究一下 copy.copy()和copy.deepcopy() 原创不易,转载请附上原文链接哦~ Tisfy:https://letmefly.blog.csdn.net/article/details/129972641 查看全文 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.dgrt.cn/a/2200697.html 如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!
- Python – 拷贝 – 浅拷贝(Shallow Copy)和深拷贝(Deep Copy)
- 操作系统-异常处理流
- 工具代码记录
- Linux基础内容(18)—— 动静态库
- 【Hello Linux】线程同步
- unicloud 模糊查询解决方案
- HttpRunner3.x 源码解析(4)-工具类loader.py
- 注意力机制在推荐模型中的应用——DIN
- [入门必看]数据结构3.3:栈和队列的应用
- rsync远程同步实现快速、安全、高效的异地备份
- 【Java开发】设计模式 12:解释器模式
- 反序列化渗透与攻防(五)之shiro反序列化漏洞
- vue2+vue3
- 【hello Linux】环境变量
- 【Linux基础】常用命令整理
- 客快物流大数据项目(一百一十二):初识Spring Cloud
- C和C++中的struct有什么区别
- docker的数据卷详解
- 13、Qt生成dll-QLibrary方式使用
- 基于mapreduce 的 minHash 矩阵压缩
假设我以这样的方式创建一个3 x 5的二维数组:
a = [[0] * 5] * 3
然后我修改a[2][3]a[2][3]a[2][3]的值为111:
a[2][3] = 1
结果会发现数组aaa中第二维坐标为333的数全部被修改为了111,而没有发生“第一维坐标为222的数全部被改成了111”
print(a) # [[0, 0, 0, 1, 0], [0, 0, 0, 1, 0], [0, 0, 0, 1, 0]]
这就涉及到了Python中的拷贝机制。
Python中的数据按照其是否可以更改,可以分为两类:
- 可变类型包括列表(list)、字典(dict)和集合(set)
- 不可变类型包括整数(int)、浮点数(float)、布尔值(bool)、元组(tuple)和字符串(str)
深拷贝: 对于不可变类型(例如整数)进行复制操作时,会产生一个新的对象。对新对象的更改不会对旧对象造成影响:
a = 2
b = a
b = 1
print(a, b) # 2 1
print(id(a), id(b)) # 2474931349840 2474931349808 # 不同
浅拷贝: 然而对于可变类型(例如列表)进行复制时,只会将对象的引用复制一份,它们实际指向同意对象。因此修改新的对象会对旧对象产生影响:
a = [1, 2, 3]
b = a
b[2] = 0
print(a, b) # [1, 2, 0] [1, 2, 0]
print(id(a), id(b)) # 2537310019904 2537310019904 # 相同
注意对新对象的修改是指修改对象中的一部分,而不是让新对象指向另一个对象
a = [1, 2, 3]
b = a
b[0] = 0 # 修改对象中的一部分,这时a = [0, 2, 3]
b = [0] # b指向了一个新的对象,原来的对象并没有被修改,这时a = [0, 2, 3]
这就解释了前言中的问题:
[0]∗5[0] * 5[0]∗5是将000复制为5份,000是不可变的整数,因此新列表[0,0,0,0,0][0, 0, 0, 0, 0][0,0,0,0,0]中的每个000都是独立的,修改其中一个000不会影响到其他000的值
但是[[0,0,0,0,0]∗3][[0, 0, 0, 0, 0] * 3][[0,0,0,0,0]∗3]是将[0,0,0,0,0][0, 0, 0, 0, 0][0,0,0,0,0]复制为5份,[0,0,0,0,0][0, 0, 0, 0, 0][0,0,0,0,0]是可变的列表,因此实质上是创建了333个指向[0,0,0,0,0][0, 0, 0, 0, 0][0,0,0,0,0]的对象,因此修改其中一个,另外两个也会随之变化。
但是:
a = [0] * 5
for i in range(5):print(id(a[i]), end=' ')
# 2977374300432 2977374300432 2977374300432 2977374300432 2977374300432 # 完全相同!!!
print(id(a[0] == id(a[1]))) # True
a[0] = 1
print(a) # [1, 0, 0, 0, 0]
print(id(a[0])) # 2977374300464
print(id(a[1])) # 2977374300432
print(id(a[2])) # 2977374300432
print(id(a[0]) == id(a[1])) # False
也许是Py的优化?只有当修改不可变元素时才真的深拷贝?
可以研究一下 copy.copy()和copy.deepcopy()
原创不易,转载请附上原文链接哦~
Tisfy:https://letmefly.blog.csdn.net/article/details/129972641
查看全文
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.dgrt.cn/a/2200697.html
如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!
Python – 拷贝 – 浅拷贝(Shallow Copy)和深拷贝(Deep Copy)
Python – 拷贝 – 浅拷贝(Shallow Copy)和深拷贝(Deep Copy)
前言
假设我以这样的方式创建一个3 x 5的二维数组:
a [[0] * 5] * 3然后我修改a[2][3]a[2][3]a[2][3]的值为111:
a[2][3] 1结果会发现数组……
操作系统-异常处理流
一、总论
1.1 软硬件分工
首先先明确,异常处理流是一个需要软硬件协作的流程。如果仅仅掌握了计组的知识,是没有办法对于异常处理流有一个很好的认识的。但是如果掌握了操作系统知识,而没有掌握计组知识,则不会有任何的实现负……
工具代码记录
ImmutableList 不可变集合,适合保存枚举值
// 不可变集合
ImmutableList.of("1", "2", "3");…
Linux基础内容(18)—— 动静态库
Linux基础内容(17)—— 软硬链接_哈里沃克的博客-CSDN博客https://blog.csdn.net/m0_63488627/article/details/129916616?spm1001.2014.3001.5501
目录
1.引例
2.解决引例的问题
3.静态链接
1.打包过程
2.方案一
3.方法二
4.动态链接
1.打包……
【Hello Linux】线程同步
作者:小萌新 专栏:Linux 作者简介:大二学生 希望能和大家一起进步! 本篇博客简介:简单介绍linux中线程同步 线程同步同步和竞态概念条件变量为什么pthread_cond_wait需要互斥量条件变量使用规范同步和竞态概念
我们首……
unicloud 模糊查询解决方案
序 1、where和aggregate的模糊搜索 2、第一种是“你好”去匹配“你好啊大家” 3、第二种是“家啊”去匹配“啊!你家呢” 只要有1个字匹配就匹配 4、第三种是“家啊”去匹配“啊!你家呢” 必须有“家”又有“啊”才匹配” 想看效果,大家可以自……
HttpRunner3.x 源码解析(4)-工具类loader.py
这些方法可以灵活的引用在其他项目中。
加载yaml文件
def _load_yaml_file(yaml_file: Text):""" load yaml file and check file content format"""with open(yaml_file, mode"rb") as stream:try:yaml_content yaml.load(stream,……
注意力机制在推荐模型中的应用——DIN
DIN 模型的应用场景是阿里最典型的电商广告推荐, DIN 模型本质上是一个点击率预估模型。
Base Model
下图是 DIN 的基础模型 Base Model。我们可以看到,Base Model 是一个典型的 Embedding MLP 的结构。它的输入特征有用户属性特征(User Pr……
[入门必看]数据结构3.3:栈和队列的应用
[入门必看]数据结构3.3:栈和队列的应用第三章 栈、队列和数组3.3 栈和队列的应用知识总览3.3.1_栈在括号匹配中的应用3.3.2_1_栈在表达式求值中的应用(上)3.3.2_2_栈在表达式求值中的应用(下)3.3.3_栈在递归中的应用3.3.43.3.5_队列的应用3.3.1_栈在括号匹配中的应用……
rsync远程同步实现快速、安全、高效的异地备份
目录
一.rsync介绍
1.rsync是什么?
2.rsync同步方式
3.rsync的特性
4.rsync的应用场景
5.rsync与cp、scp对比
6.rsync同步源
二.rsync命令
1.常用选项
2.实例:本地复制对比
3.配置源的两种表示方法
三.实验:配置rsync下行同步
四……
【Java开发】设计模式 12:解释器模式
1 解释器模式介绍
解释器模式是一种行为型设计模式,它提供了一种方法来解释语言、表达式或符号。
在该模式中,定义了一个表达式接口,并实现了对应的表达式类,这些类可以解释不同的符号组成的表达式,从而实现对语言的……
反序列化渗透与攻防(五)之shiro反序列化漏洞
Shiro反序列化漏洞
Shiro介绍
Apache Shiro是一款开源安全框架,提供身份验证、授权、密码学和会话管理。Shiro框架直观、易用,同时也能提供健壮的安全性
Apache Shiro 1.2.4及以前版本中,加密的用户信息序列化后存储在名为remember-me的Cookie中。攻击者可以使用Shiro的默……
vue2+vue3
vue2vue3尚硅谷vue2vue2 课程简介【02:24】vue2 Vue简介【17:59】vue2 Vue官网使用指南【14:07】vue2 搭建Vue开发环境【13:54】vue2 Hello小案例【22:25】了解: 不常用常用:id 更常用 简单class差值总结vue 实例vue 模板 : 先 取 ࿰……
【hello Linux】环境变量
目录 1. 环境变量的概念 2. 常见的环境变量 3. 查看环境变量 4. 和环境变量相关的命令 5. 环境变量的组织方式 6. 通过代码获取环境变量 7. 通过系统调用获取环境变量 Linux🌷 在开始今天的内容之前,先来看一幅图片吧! 不知道你们是否和我一……
【Linux基础】常用命令整理
ls命令
-a选项,可以展示隐藏的文件和文件夹-l选项,以列表形式展示内容-h,需要和-l搭配使用,可以展示文件的大小单位ls -lah等同于la -a -l -h
cd命令(change directory)
语法:cd [Linux路径]……
客快物流大数据项目(一百一十二):初识Spring Cloud
文章目录
初识Spring Cloud
一、Spring Cloud简介
二、SpringCloud 基础架构图…
C和C++中的struct有什么区别
区别一: C语言中: Struct是用户自定义数据类型(UDT)。 C语言中: Struct是抽象数据类型(ADT),支持成员函数的定义。
区别二:
C中的struct是没有权限设置的,……
docker的数据卷详解
数据卷 数据卷是宿主机中的一个目录或文件,当容器目录和数据卷目录绑定后,对方修改会立即同步
一个数据卷可以同时被多个容器同时挂载,一个容器也可以被挂载多个数据卷
数据卷作用:容器数据持久化 /外部机器和容器间接通信 /容器……
13、Qt生成dll-QLibrary方式使用
Qt创建dll,使用QLibrary类方式调用dll
一、创建项目
1、新建项目->其他项目->Empty qmake Project->Choose 2、输入项目名,选择项目位置,下一步 3、选择MinGW,下一步 4、完成 5、.pro中添加TEMPLATE subdirsÿ……
基于mapreduce 的 minHash 矩阵压缩
Minhash作用: 对大矩阵进行降维处理,在进行计算俩个用户之间的相似度。
比如: 俩个用户手机下载的APP的相似度,在一个矩阵中会有很多很多的用户要比较没俩个用户之间的相似度是一个很大的计算任务 如果首先对这个矩阵降维处理&am……
编程日记2023/4/16 14:50:37
















发表回复