这是怎么回事,对二维列表内部的数据感到迷惑
本帖最后由 brokenheart 于 2020-12-5 14:51 编辑语言是Python;修改二维列表的数值,还会影响到 原先使用copy方法赋值的其它列表的内部数值,即使它们是不同的变量地址?三维的也是这样,
地址不同又是如何影响的,很迷惑啊?为什么一维列表又没有这种情况?
可能变量地址不同但是你赋值定义的数组地址是一样的 相当于
a1=
a2=
ls1=
ls2=ls1.copy()相当于ls2=a1 ls2=a2
ls1=0相当于a1=0 c03xp 发表于 2020-11-24 10:15
相当于
a1=
a2=
也就是说通过赋值后,两个二维数组里面的一维数组指向的都是同一个地址,所以会产生相互影响。
明白了,原先没有真正理解内部数据怎么产生的,赋值后内部数据的地址是一样的,所以用 ls2 = .copy(), ls1.copy()] 两个数据之间就没影响了 列表里面的列表是一个独立的列表。 本帖最后由 ufo0033 于 2020-11-24 14:56 编辑
python中**copy**只是表层copy 如果要彻底的copy成两个不同的对象 需要用 **deepcopy**
推荐百度下 **python 坑**, python中存在不少类似的点,很多是设计造成的 本帖最后由 brokenheart 于 2020-12-5 14:54 编辑
ufo0033 发表于 2020-11-24 14:47
python中**copy**只是表层copy 如果要彻底的copy成两个不同的对象 需要用 **deepcopy**
搜了一下,才知道还有这么多坑 {:301_1009:}
如果我没记错的话,python中的list是可变对象.
并且list的结构并不是一段连续内存,应该是类似一个链式结构.
赋值时也仅仅是把这个对象的引用赋值给指定变量.同时,其中的每一个元素也是引用/常量等等
而list.copy如字面意思,仅仅拷贝其中各个元素的引用/常量等而已.
如果你学过C,不会不了解.真正的深拷贝仅仅是主观意义上存在的.
页:
[1]