Python从入门到入土之id,关于元素的内存问题,深浅copy

Python是有虚拟器的,在虚拟机中会指定变量一个逻辑地址,我们运用id()函数可以查看变量的内存地址。如下图所示:

Python从入门到入土之id,关于元素的内存问题,深浅copy

(嘿嘿嘿,这张图终于没有水印了,因为我刚刚f12将那串代码删了,,可是一个个删除好麻烦,算了算了)

和单个变量不同的是,列表里面的元素会随着对应列表的改变而改变,比如下图,是因为name2会指向name1的内存地址,并不是直接指向元素的地址。

Python从入门到入土之id,关于元素的内存问题,深浅copy

如何取消这种操作??copy()欢迎你!!

Python从入门到入土之id,关于元素的内存问题,深浅copy

但是!!but!!!还有新的问题!!如果我们添加或者修改的不是单个元素怎么办!!比如添加一个列表list

Python从入门到入土之id,关于元素的内存问题,深浅copy

这个时候的嵌套进的内存还是name1和name2相等

Python从入门到入土之id,关于元素的内存问题,深浅copy

这里可以看出来,我们在输入name[1]的时候是先给这个元素一个内存地址,比如30378056,但是一旦我们改变name1[1]的值,其实我理解的是先生成一个‘Jack’的内存的逻辑地址35583960,然后将name1[1]的指针指向这个新地址。

Python从入门到入土之id,关于元素的内存问题,深浅copy

如上图,我将name1[-1][0]里的Java改成Python,但是两个都变了,此时我循规蹈矩,机智的使用name1[-1]=name2[-1][0]再次修改为Java,大成功!除了这种方法,我们还有以下的方法,深度处理要import 的

具体的骚操作如下图所示:

Python从入门到入土之id,关于元素的内存问题,深浅copy

这种方法不推荐使用,因为有的数据的内存很大。