python类的赋值操作和浅拷贝
变量的赋值
只是形成了两个变量,但是还是指向同一个对象,我们来看看代码
class SWS:
pass
class SSN:
pass
class C:
def __init__(self, sws, ssn):
self.sws = sws
self.ssn = ssn
#(1)变量的赋值操作
sws_0 = SWS()
sws_1 = sws_0
print(sws_0)
print(sws_1)
######
<__main__.SWS object at 0x0000022230273FD0>
<__main__.SWS object at 0x0000022230273FD0>
我们可以看到两个变量的地址都是一模一样的,在这里变量的赋值其实就是和C语言里面的指针赋值差不多,都是指向同一个对象,如图所示

浅拷贝
python的拷贝一般都是浅拷贝,拷贝时,对象包含的子对象内容不拷贝,因此,源对象与拷贝对象会引用同一个子对象,那这句话是什么意思呢,一起来看一下
#(2)类的浅拷贝
ssn = SSN()
c = C(sws_0, ssn)
import copy
print(ssn)
c_2 = copy.copy(c)
print(c, c.sws, c.ssn)
print(c_2, c_2.sws, c_2.ssn)
######
<__main__.SSN object at 0x0000022230273FA0>
<__main__.C object at 0x0000022230273F70> <__main__.SWS object at 0x0000022230273FD0> <__main__.SSN object at 0x0000022230273FA0>
<__main__.C object at 0x0000022230273D90> <__main__.SWS object at 0x0000022230273FD0> <__main__.SSN object at 0x0000022230273FA0>
在输出当中我们就可以看到啊c和c_2的地址不一样呀,但是怎么后面的子对象地址不一样呢
这就是呀,我们利用浅拷贝的方法使得c和c2都成为了C的实例对象,但是他们内部的子对象sws和ssn却都是指向同一个SWS和SSN的实例对象
python类的赋值操作和浅拷贝的更多相关文章
- python中的赋值操作
参考:https://www.cnblogs.com/andywenzhi/p/7453374.html?tdsourcetag=s_pcqq_aiomsg(写的蛮好) python中的赋值操作“=” ...
- python中的赋值操作和复制操作
之前一直写C#,变量之间赋值相当于拷贝,修改拷贝变量不会改变原来的值.但是在python中发现赋值操作本质是和C++中的引用类似,即指向同一块内存空间.下面通过一个例子说明: p=[0,1,2,3,4 ...
- Python3中的赋值操作、浅拷贝与深拷贝
一:关于赋值操作与浅拷贝 1.变量的赋值 首先以一个例子来说明一下:定义变量a = 1,使b = a.开始的情况下打印a与b都为1(显而易见,哈哈) 但是接下来,我们做一下改动,令 a = 222,再 ...
- Python中的赋值(复制)、浅拷贝、深拷贝之间的区别
1.赋值: 只是复制了新对象的引用,不会开辟新的内存空间. 2.浅拷贝: 创建新对象,其内容是原对象的引用. 浅拷贝有三种形式:切片操作,工厂函数,copy模块中的copy函数. 如: ...
- 【Python】直接赋值,深拷贝和浅拷贝
直接赋值: 对象的引用,也就是给对象起别名 浅拷贝: 拷贝父对象,但是不会拷贝对象的内部的子对象. 深拷贝: 拷贝父对象. 以及其内部的子对象 在之前的文章中,提到可变对象和不可变对象,接下来也是以这 ...
- python中的赋值与拷贝(浅拷贝与深拷贝)
1.赋值与拷贝 直接赋值(b=a)是传引用,b改动a也会改动. a = [1, 2, 3, 4] b = a b[1] = 999 print(a, b) #[1, 999, 3, 4] [1, 99 ...
- python中的赋值操作与C语言中的赋值操作中的巨大差别
首先让我们来看一个简单的C程序: a = ; b = a; b = ; printf("a = %d, b = %d\n", a, b); 相信只要学过C语言, 不用运行程序便能知 ...
- Python sort后赋值 操作陷阱
x=[1,4,2,0] # 错误的方式,因为sort没有返回值 y=x.sort() type (y) #NoneType #正确的方式 x.sort() y=x[:]
- 利用RALL机制来事项String类的赋值操作
class String{ public: char *str; String(const char *ptr=NULL){ if(ptr==NULL) { str=NULL; }else{ str= ...
- 【Python&数据结构】 抽象数据类型 Python类机制和异常
这篇是<数据结构与算法Python语言描述>的笔记,但是大头在Python类机制和面向对象编程的说明上面.我也不知道该放什么分类了..总之之前也没怎么认真接触过基于类而不是独立函数的Pyt ...
随机推荐
- js: 获取Blob的值
this.ws.onmessage = async (msg) => { console.log('从服务端获取到了数据') // 从真正服务端发送过来的原始数据时在msg中的data字段 co ...
- bzip2: (stdin) is not a bzip2 file.
用tar -zxvf dir.tar.gz命令解压即可.
- 在不修改代码情况下解决 Chrome 浏览器跨域
前言: 在前后台分离的项目,跨域是经常遇到的问题了.是实际解决方案中,大部分采用服务端配置,而如果只是调试,可以通过配置 Chrome 浏览器实现跨域,以下以 NodeJs 服务为例. 开始: 1. ...
- Codeforces 1855B:Longest Divisors Interval 最长的连续约数区间
1855B.Longest Divisors Interval Description: 对于一个整数 \(n\) \((1\leq n \leq 10^{18})\),找到一段最长的区间\([l,r ...
- 批量获取FreeSWITCH所有分机号及其密码
前言 有次项目上需要获取所有FreeSWITCH注册分机的分机号和密码,就用python写了个小脚本来获取. 可以先把freeswitch/conf/directory/default/目录下的所有x ...
- CodeForces CF1846G 题解
CodeForces CF1846G 题解 CodeForces题目链接 洛谷题目链接 标准答案是状压之后,转化成Dijkstra算法跑最短路.我这里提供一个不一样的思路. 题意简述 主人公得了病,有 ...
- mysqlbinlog输出sql
./mysqlbinlog -v --base64-output=DECODE-ROWS ~/Downloads/tymysql2|grep -A4 'ALTER' >~/Downloads/a ...
- DEDEBIZ禁止发布重复标题文章的方法
修改文件位置 /admin/article_add.php 找到 if (empty($click)) $click = ($cfg_arc_click == '-1' ? mt_rand(1000, ...
- 聊一聊 TLS/SSL
哈喽大家好,我是咸鱼 当我们在上网冲浪的时候,会在浏览器界面顶部看到一个小锁标志,或者网址以 "https://" 开头 这意味着我们正在使用 TLS/SSL 协议进行安全通信.虽 ...
- C#/.NET/.NET Core优秀项目和框架2023年9月简报
前言 公众号每月定期推广和分享的C#/.NET/.NET Core优秀项目和框架(公众号每周至少推荐两个优秀的项目和框架当然节假日除外),公众号推文有项目和框架的介绍.功能特点以及部分截图等(打不开或 ...