图-1:
前两行一样,这样定义list02,其会产生和list01一样的指向。
第三行,左边是修改元素的值,[0]的指向发生变化,所以list01和list02就都变了;而右边,是修改整个list01, 让它指向了一个新的变量,解除了与之前变量的关系,但是并不影响之前的变量,所以,list02不会变!
也就是说:list01 = list02 的这种表达,是两个列表变量共同指向了一些变量,这些变量发生变化,他们就都跟着变,但是,list01和list02各自的变化是不会互通的。
图2:
这张图叫“浅拷贝,平修改”,切片拷贝是浅拷贝的一种,只复制到了指向关系,没有复制底层。
所以当list01[0]发生变化时,它自己指向其他变量了,但不影响list02接着指向原目标。
图3:
“浅拷贝,深修改”
按照代码顺序去看图,就不会产生混乱。
list01[1][0] = 60, 这种修改已经直达两个列表共同指向的最后一层了,或者说是共有变量,所以这个修改会影响到list02.
图4:
深拷贝,完完全全的复制行为,两个列表再不会产生任何影响
图5:
元组:按需分配
列表:预留空间
相关文章: