1. 程式人生 > >列表的使用2,深COPY和淺COPY,循環列表,步長切片

列表的使用2,深COPY和淺COPY,循環列表,步長切片

strong 全部 有一個 也有 內存地址 log 嚴重 mes 數值

name2=names.copy()

技術分享

下面我看幾種奇怪的現象:

首先把源列表copy以後,把源列表第2個數值修改。那麽沒毛病。

技術分享

如果源列表裏,還包含了一個子列表:這也沒毛病

技術分享

如果我們這個時候修改子列表的數值。我們來看一個神奇的現象:

技術分享

copy是一種淺COPY,它只會COPY第一層的數據,而不會深入COPY。只會COPY子列表的內存指針,內存地址。

如果你不用COPY的方法,那問題會更嚴重:

技術分享

結果是這樣的,連淺COPY都不如:相當於只把列表的內存地址復制了一下:

技術分享

技術分享簡單來說就是這種情況。

但是如果是數字或者字符串變量,就不會只把內存地址COPY一下結束,數字或者字符串變量是真正的COPY一份。請註意!

技術分享

如果你想深COPY一份列表,可以用下面的方法:導入COPY模塊,但是要註意copy模塊也有兩種方法,一個淺COPY(跟之前的names.copy()是一個道理),如下圖:

技術分享

技術分享

COPY模塊還有一個深COPY,deepcopy

技術分享

技術分享

還可以用循環的方法來打印列表的數值:

技術分享

打印奇數的數值:

技術分享

也可以省略0和-1,寫成這樣:

技術分享

打印全部的數值,也可以這麽寫:

技術分享

列表的使用2,深COPY和淺COPY,循環列表,步長切片