关于copy的问题

关于copy的问题

视频中,都是执行了copy函数

b[0].append(10)
执行后,a列表中的数值也更改了。
但是执行b.append(10)
a列表中的数值并不会更改。这是为什么?
我的一开始是这样理解的,a.b都是相当c语言中的指针。a=b只是赋值了指针,因此更改任何内容都相当
于更改了同指针内存下的值。copy函数相当于另外开了内存,并把值也填充到内存里了,因此更改互不影响
但这里。b[0].append添加某个值的内容,为什么另外一个也会有影响,b.append添加却互不影响呢?


正在回答

登陆购买课程后可参与讨论,去登陆

1回答

同学,你好。 a 和 b 是一个独立的对象,但他们的子元素(可变数据类型)还是指向的是引用,浅拷贝后,改变原始对象中为可变类型的元素的值,会同时影响拷贝对象;改变原始对象中为不可变类型的元素的值,只有原始数据受影响

例:a,b的id地址是不一样的,表示是两个不同的对象,而a[0]和b[0]的id地址是一样的,表示指向的是相同的内存地址,因此是同学看到的情况

http://img1.sycdn.imooc.com//climg/5f1fc980094c4b6b04610700.jpg

如果我的回答解决了您的疑惑,请采纳!祝学习愉快~~~~

  • hackerdream0810 提问者 #1
    我明白了,也就是说其实a当中的列表元素在实际情况中,它也是个引用,它并不是1,2,3这具体的值,这个copy把这个引用copy了过去,也就是指针copy了过去,实际上表达的是。a = [引用,引用],因此,改了这个引用(指针)里的值,自然另外的也会一起更改。
    2020-07-28 15:14:02
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师