在学习python中,发现一个小的知识点,记录一下以免遗忘 大佬绕路 这里list11是原list。 这里执行的操作分别为
list13 = list11
list12 = list11[:]
这两种方法的区别在于,一个是直接进行赋值,一个是利用分片的方法进行赋值。他们的效果有点类似于深浅拷贝的含义。 1、通过等号直接赋值相当于只是多了一个指向原list的指针,他们的指向是一致的,所以改变list11,list13也会随之改变。 2、而通过分片的方法进行赋值,相当于在内存区域多划出了一个区域存储list12,所以list11的值改变并不会影响到list13. 下面有一段视频教程的代码,看了之后也许会帮助理解 上面是针对list拷贝问题,后来又遇到关于字典的赋值与清空的问题,借用小甲鱼的例子进行进一步说明 另外对于字典有内嵌拷贝方法,根据下面的截图其实可以看出来,通过copy方法,相当于是浅拷贝,只是单纯拷贝了数值,id不一样(或者这里可以理解成地址是不一样的?) 而通过赋值的方法,相当于是深拷贝,其id是相同的,可以理解为深拷贝,其指向的地址也是相同的 就是说这里如果改变a的值,b的值不会随之改变,而c的值会改变 这一段其实可以类比我之前发过的一篇关于深浅拷贝的文章,我自己的理解是浅拷贝仅仅是拷贝了数值层面的数据,而深拷贝是除了数据域之外,也拷贝了地址指向的部分,所以针对深拷贝才会出现,改变其中一个值,另一个值也发生改变。
ps:另外有一个小点想放在这里面提一嘴,上面看到字典的内置函数中有pop方法,想到在list当中,数据是有顺序的,所以pop弹出的是栈顶元素,但是对于字典而言,是没有顺序的说法,如果使用pop方法会随机弹出字典中的元素。
|