赋值、浅拷贝、深拷贝

定时移动鼠标点击鼠标,防止电脑息屏的vba脚本 定时移动鼠标,使系统始终处于激活状态,防止系统息屏。 阅读详情

浅拷贝的方法

import copy



person = ["name", ["saving", 100]]



p1 = copy.copy(person)

p2 = person.copy()

p3 = person[:]

p4 = list(person)

(一)2个为什么

          先通过2个为什么来了解一下python内存中变量的存储情况。

>>> name = [1,2,3,["alex","rain"]]
>>> name2 = name.copy() # 将原列表copy一份赋值给name2
>>> print(name)
[1, 2, 3, ['alex', 'rain']]
>>> print(name2)
[1, 2, 3, ['alex', 'rain']]
>>>

name与name2相同

第一个为什么:

>>> name[1] = -2
>>> print(name)
[1, -2, 3, ['alex', 'rain']]
>>> print(name2)
[1, 2, 3, ['alex', 'rain']]
>>>

name[1]改变后,name改变了而name2没有改变,为什么?

第二个为什么:

>>> name[3][0] = "ALEX"
>>> print(name)
[1, -2, 3, ['ALEX', 'rain']]
>>> print(name2)
[1, 2, 3, ['ALEX', 'rain']]
>>>

将name[3][0]的值改后,name改变了,name2也改变了,为什么?

第一个为什么和第二个为什么都对列表进行了更改,而结果为什么不一样尼?

    首先我们要清楚,列表name的元素是存在于多块内存空间中的,不是在同一块;每个元素的内存地址都是独立的。

    变量name等于[1,2,3,["alex","rain"]]这个含有这些元素的列表的时候,内存中发生了2件事:一是变量name是个列表,开辟了一块内存空间;二是列表里的每一个元素各自开辟了属于自己的内存空间。name列表开辟的内存空间里存的不是元素,而是每个元素的内存地址。每一个元素比作是家的话,name列表的内存空间里存的就是邮寄到你家的包裹上的地址,是一个指向。

    name2 copy name,只是copy了name中的元素(一级元素)的内存地址,即将id(1),id(2),id(3)等这些元素的内存地址复制到了name2的内存空间里了。

解答第一个为什么:

    将name中的2改为-2,name内的2的内存地址会被擦除,然后将新开辟的-2的内存地址占位到此处。由于2的内存地址还被name2引用,所以2的内存不会被释放,依然存在。

    对于第一个为什么,name的第一个元素为-2,name2的第一个元素为2,因为这2个的内存地址不同,所以地址所指向的数据(在内存里以十六进制数表示)就不同。内存地址不同,数据不同。

解答第二个为什么:

     要区分清楚列表的内存地址和列表中元素的内存地址是不一样的,不要混淆。

     name2 copy name的时候,copy了每个元素(一级元素)的内存地址。name中元素['alex', 'rain']这个小列表的内存地址也被复制,即name中的小列表的内存地址与name2中的小列表的内存地址是一样的,也就是说name2中的小列表没有开辟新的空间,而是引用了name中小列表的空间。id(name[3]) = id(name2[3]).

    第二个为什么中,对name内的小列表中的元素"alex"进行了全大写更改(过程:"ALEX"开辟了一块新的空间,将这块新空间的地址放到小列表中的索引为0的位置),即小列表(嵌套列表)内的元素的发生改变,而小列表的内存地址没有发生变化,name2中的小列表的内存地址与name中的小列表的内存地址一样,所以name中小列表的值发生变化,name2中的小列表的值也会变化。内存地址相同,指向的数据也相同。

(二)赋值、浅拷贝、深拷贝

1、赋值:传递对象的引用而已,原始列表name改变,被赋值的n也会做相同的改变。(见下图,图画的不好)

 

2.浅拷贝:拷贝父对象,不会拷贝对象的内部的子对象。即拷贝列表name里面的一级元素的内存地址,不拷贝name里的小列表里的元素的内存地址。

 

 

 

 

3.深拷贝:copy 模块的 deepcopy 方法,完全拷贝了父对象及其子对象。即name2不仅拷贝了name中一级元素(1,2,3,["alex","rain"])的的内存地址,也拷贝了嵌套列表,["alex","rain"]里面的"alex"和"rain"的内存地址。

 

  

 name比作是一个容器的话,我们把name里的每样东西复制了一份放到另一个容器name2里。name里有东西丢失的话,name2里的还在,而name2这个容器是新开辟的空间。在第一个容器里的东西还未变化之前,2个不同容器装了同样的东西。

 非容器类型的没有拷贝这一说。

接口电路设计的关键要点 接口电路设计是嵌入式硬件开发的核心环节,本文系统阐述了五大关键设计要点:1)电平匹配技术,详细分析了3.3V/5V系统互连方案及转换电路计算;2)阻抗匹配原理,包括高速信号反射机制及差分信号处理;3)滤波与去耦设计,提出多级电容配置和"先电容后过孔"布局原则;4)接地设计规范,重点说明模拟/数字地分离及高速信号回流路径;5)防护电路设计,涵盖防反接、过流保护及ESD防护方案。文章通过具体计算公式、器件选型指南和布局技巧,为接口电路设计提供了系统化的解决方案,并附有设计检查清单和典型问题分 阅读详情

相关推荐

树莓派烧录验证失败:跳过验证步骤实现成功启动的实用技巧

本文针对树莓派烧录系统时常见的验证失败问题,提供了跳过验证步骤实现成功启动的实用技巧。通过分析Windows与Linux文件系统差异导致的SD卡验证报错,指导用户在烧录完成后立即关闭验证窗口,或使用BalenaEtcher等第三方工具规避问题,确保树莓派正常启动。

yyy34的博客 945

Python赋值、浅拷贝与深拷贝详解(详细分析)

简述 在使用Python语言,通常都会面临对象赋值、参数传递的使用,为了更深入理解它们的底层原理。Python也像其他语言如Java一样引入了浅考本和深拷贝的概念。 首先我们要明确一下:变量存储在栈内存,对象存储在堆内存。 Python数据类型分为可变数据类型和不可变数据类型。 可变数据类型包括:List(列表)、Dictionary(字典)、Set(集合) 不可变数据类型包括:String(字符串)、Number(数字)、Tuple(元组) 浅拷贝: (1)不拷贝子对象的内容,只拷贝子对

weixin_47614014的博客 5752

电机控制——PMSM无感FOC控制(一)FOC入门

FOC 是一种电机控制技术,全称为 Field Oriented Control(磁场定向控制),也称作矢量控制。该技术可以提高电机的效率、控制稳定性和精度,广泛应用于电机驱动系统中,是目前无刷直流电机(BLDC)、永磁同步电机(PMSM)、感应电机的高效控制的最优方法之一。本节主要讲了FOC的大致流程,带大家先了解FOC到底是个什么东西在做什么,各个模块具体的原理会放到后面的章节详细讲解。FOC其实就是通过控制,相电流按照正弦变化,从而产生出旋转的磁场,控制电机转子转动。

zhuxinmingde的博客 2612

赋值、浅拷贝及深拷贝

浅拷贝:创建一个新对象,这个对象有着原始对象属性值的一份精确拷贝。如果属性是基本类型,拷贝的就是基本类型的值,如果属性是引用类型,拷贝的就是内存地址 ,所以如果其中一个对象改变了这个地址,就会影响到另一个对象。**只复制引用(指针),而未复制真正的值。**比如:等于符号(=) 、Object.assign(target, …sources) 深拷贝:将一个对象从内存中完整的拷贝一份出来,从堆内存中开辟一个新的区域存放新对象,且修改新对象不会影响原对象。**对目标的完全拷贝,不像浅拷贝那样只是复制了一层引用,

时光清浅处,一步一安然 562

Rust嵌入式开发环境搭建指南(基于Stm32+Vscode)

本文档旨在指导开发者如何搭建基于Rust语言的STM32嵌入式开发环境。相比传统的C/C++开发方式,Rust提供了更强的内存安全保障和现代化的语言特性,非常适合嵌入式系统开发。本指南将详细介绍从环境搭建到项目配置的全过程,特别关注VSCode作为IDE的配置以及STLink和DAPLink调试器的使用。

u014627020的博客 2601

微生物16S数据上传NCBI的SRA库

本篇内容仅包括:俺自己的实验收集了淡水、淡水沉积物、海水、海草附着微生物样品,测序所得的Fastq格式数据,在文章投稿发表时被要求数据需上传NCBI的SRA库,得到一个PRJNA2347899这样子的IDs。仅解决了这个上传过程!

Xf_Niu的博客 7432

详细解析赋值、浅拷贝和深拷贝

@TOC 一、赋值(Copy) 赋值是将某一数值或对象赋给某个变量的过程,分为下面 2 部分 基本数据类型:赋值,赋值之后两个变量互不影响 引用数据类型:赋址,两个变量具有相同的引用,指向同一个对象,相互之间有影响 对基本类型进行赋值操作,两个变量互不影响。 let a = "muyiy"; let b = a; console.log(b); // muyiy a = "change"; ...

tinfengyee的博客 581

Orange:一个基于 Python 的数据挖掘和机器学习平台

Orange是一个开源的数据挖掘和机器学习平台,采用可视化编程方式,用户可通过拖拽组件构建数据分析工作流。它支持交互式数据探索、多种机器学习算法,并允许Python脚本扩展。Orange特别适合教育和研究,提供直观的界面和丰富的可视化工具。最新版本为3.39.0,支持Windows、macOS和Linux系统。作为GPL许可的免费工具,它既能满足初学者需求,又能通过Python集成实现高级功能。

likuoelie的博客 1432

python中的深拷贝和浅拷贝

深拷贝、浅拷贝

Tanux的博客 1458

网课、网页视频倍速播放简单脚本

一个简单的网页视频倍速脚本

huazn612的博客 1万+

EPICS电机支持(asynMotor)

EPICS电机支持(asynMotor)

yuyuyuliang00的博客 915

c++——浅拷贝和深拷贝、浅赋值和深赋值

深拷贝与浅拷贝、深赋值和浅赋值

2301_79310249的博客 1216

模型预测控制(MPC)算法介绍

模型预测控制(Model Predictive Control,MPC)是一种先进的控制策略,广泛应用于工业过程控制、机器人控制、电力系统等领域。它基于系统的模型,通过滚动优化来预测系统未来的行为,并据此确定当前的最优控制输入。

AI的内部世界的博客 7168

Python中如何理解浅拷贝、深拷贝和赋值

今天上Python课解决了一个关于列表中“深拷贝、浅拷贝、赋值”的问题,这里做一个分享!

小羊不会飞的博客 785

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

python赋值浅拷贝和深拷贝的区别_python赋值、浅拷贝、深拷贝区别

在写Python过程中,经常会遇到对象的拷贝,如果不理解浅拷贝和深拷贝的概念,你的代码就可能出现一些问题。所以,在这里按个人的理解谈谈它们之间的区别。一、赋值(assignment)在《Python FAQ1》一文中,对赋值已经讲的很清楚了,关键要理解变量与对象的关系。>>> a = [1, 2, 3]>>> b = a>>> print(id...

weixin_42601134的博客 920

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

Python 中的赋值 (复制)、浅拷贝与深拷贝

Python 中的赋值 (复制)、浅拷贝与深拷贝

twinkle的博客 1991

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

python---赋值、浅拷贝、深拷贝

在Python中,理解赋值、浅拷贝和深拷贝的区别对于避免意外的数据修改非常重要。

qq_58662768的博客 734

Python高级语法_Python的赋值、深拷贝与浅拷贝的区别

Python高级语法 Python的赋值、深拷贝与浅拷贝的区别 通过前面的学习我们了解到,在python中,给一个对象赋值,实际上就是对象对内存空间存储的值的引用。当我们把对象赋值给另一个变量的时候,这个变量并没有拷贝这个对象,而只是拷贝了这个对象的引用而已。 一般情况下我们会通过三种方法来实现拷贝对象的引用。 直接赋值 直接赋值,默认浅拷贝传递对象的引用而已,原始列表改变,被赋值的变量也会做相同...

易编橙 · 终身成长社群,相遇已是上上签! 1644

python 字典赋值、浅拷贝、深拷贝

# 项目开发中,因字典可修改,所以注意拷贝方式 import copy 1. 原字典操作 dict1 = {'user': 'test', 'num': [1, 2, 3]} # 原字典 dict2 = dict1 # 直接赋值 dict3 = ...

LeonTom的博客 1万+

Python 赋值、浅拷贝、深拷贝的区别?

http://songlee24.github.io/2014/08/15/python-FAQ-02/ 在写Python过程中,经常会遇到对象的拷贝,如果不理解浅拷贝和深拷贝的概念,你的代码就可能出现一些问题。所以,在这里按个人的理解谈谈它们之间的区别。 一、赋值(assignment) 在《Python FAQ1》一文中,对赋值已经讲的很清楚了,关键要

余功鹏的专栏 8934

Python中赋值、浅拷贝与深拷贝

python中关于对象复制有三种类型的使用方式,fuzhi

舒夜无痕--成为更好的自己 1万+

赋值和深拷贝和浅拷贝

赋值:引用复制。浅拷贝:一层复制,内层共享。深拷贝:完全独立的复制。栗子:对子对象的影响主要取决于使用的赋值方式(赋值、浅拷贝或深拷贝)。以下是对每种方式的详细说明和示例,尤其是在处理嵌套对象时如何影响原始对象。赋值:修改任意属性都会影响原始对象,因为它们共享同一引用。浅拷贝:顶层属性的修改不会影响原始对象,但对子对象的修改会影响原始对象,因为它们共享同一引用。深拷贝:所有修改都不会影响原始对象,两个对象完全独立。浅拷贝的方法。

this__valve的博客 900

python赋值、深拷贝和浅拷贝的区别详解

一、前言 在python中,对象赋值实际上是对象的引用。当创建一个对象,然后把它赋值给另一个变量的时候,python并没有拷贝这个对象,而只是拷贝了这个对象的引用。 二、区别 1、直接赋值,默认浅拷贝传递对象的引用而已,原始列表改变,被赋值的变量也会做相同的改变 # 直接赋值 dict_1 = {"key1":[1,2,3,4],"key2":"val2"} dict_2 = dict_1 dict_1["key1"].append(5) print("dict_1内存地址:",id(dict_1

没有一劳永逸,永远要重新开始,重新进入动荡,重新寻找,重新赢得欢喜。 4015

Python 直接赋值、浅拷贝与深拷贝

Python 中关于直接赋值与拷贝的区别

myDarling_的博客 939

Python中的赋值、浅拷贝和深拷贝的区别

Python中的赋值、浅拷贝和深拷贝的区别

limengshi138392的博客 984

JS浅拷贝深拷贝——赋值VS浅拷贝深拷贝

文章目录什么是深/浅拷贝,他们跟赋值有何区别?赋值和深/浅拷贝的区别实现一个深拷贝简单版考虑数组循环引用考虑其他类型 什么是深/浅拷贝,他们跟赋值有何区别? 浅拷贝: 浅拷贝是创建一个新对象,这个对象有着原始对象属性值的一份精确拷贝。 如果对象的属性是基本类型,拷贝的就是基本类型的值,如果属性是引用类型,拷贝的就是内存地址。所以如果其中一个对象改变了这个地址,就会影响到另一个对象。 深拷贝: 深拷贝是将一个对象从内存中完整的拷贝一份出来,从堆内存中开辟一个新的区域存放对象,且修改新对象不会影响原对象。 赋值

weixin_45740510的博客 801
上一篇: 购物车程序实例
下一篇: 字符串操作
RoundOff
博客等级 码龄9年 15粉丝 25原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值