python中用一个类的方法更改另一个类的成员变量

在这里插入图片描述
如上图所示,代码很烂,只是用来测试用的
定义两个类,a和b,然后实例化,初始参数均传入列表[1]
然后调用a的update方法,更改b的a1成员。
从输出中可以看出调用update方法前后,b的a1成员发生变化

注意!!
只有b的a1成员是可变对象的时候,这种方法才可以更改成功
个人理解是因为,python中可变对象存储的方式是存储该对象所在内存的指针,因此传入函数的是该可变对象的指针,那么进行操作之后,其原本的值就会发生改变。仅为个人理解,如果不对,欢迎批评指正。

若传入的对象是不可变对象,则上述方法不会成功,如下所示:
在这里插入图片描述
调用update方法前后,b的成员变量并没有发生改变。

由此引出深拷贝浅拷贝
教程

另外:numpy数组进行深复制

import numpy as np
a = np.array([1,2,3])
b = np.array([4,5,6])

此时a和b占用两块不同的内存地址,如果此时:

a = b

则仅仅是将b所在的地址赋给a,以此来实现a=b,也即此时,a和b指向内存同一块地址
但如果是:

a[...] = b

此时,a的内存地址固定不动,将b中各元素的值赋给a,此时,a和b指向的内存地址不同,且和定义变量时的内存地址相同,换句话说,[...]操作可以固定变量的内存地址,也可以称为深拷贝。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值