python如何克隆一个 list

silencement
Lepaskan: 2019-05-25 16:18:18
asal
3206 orang telah melayarinya

python如何克隆一个 list

如何在Python中复制一个列表?

可能有人会说,这不是很简单的事情吗?直接一个new_list = old_list不就好了?
那实际上这样操作是否可行呢?让我们来举个栗子:

55699fe3991ab111fbafcd15f0c0af4.png

是不是觉得很神奇,当我原先的列表发生变化的时候,我新复制的列表也发生了变化,这根本不是我想要的结果啊。那么,为什么会出现这种情况呢?
原来,在Pyhton中使用赋值(=)的时候,实际上只是给新变量指向一个引用,简单一点讲就是当我们执行a=b时,实际上进行的操作是将a的内存地址赋值给了b,此时a和b指向的是同一个内存地址,并不是开辟一个新的内存地址给b,所以每当内存地址里的值发生变化的时候,b的值也会随之变化。

那么我们该如何去复制才是正确的呢?如果列表内为不可变数据时可用以下方法:

7c6eb3680e5bc18be2895f7c4d60c2b.png

我们可以随便抽取其中一种方法来验证下:

45c99ad5c4d39370ccfd41e96e8da20.png

可以看到,这时候我们复制的列表都是具有独立性的,完全不受原列表的影响,但是,有注意到我的标题吗?列表内为不可变数据类型时可使用。这时候我们还是举个反例来说明下:

d99f1aa54e93353ded23c4a3fa5d5a6.png

此时你会发现,似乎这又跟我们使用赋值(=)的结果有些类似,但又有所不同。其实在我们使用上面几种复制列表的时候,它实现的是一种浅拷贝。浅拷贝呢,其实比赋值高级一点,就是他会把列表中的值都复制给新对象,但是如果列表中的值是可变数据(列表、字典、函数、类等),他只会复制一个引用。

深拷贝

那么,我们如果拷贝的列表中带有可变数据时该怎么进行复制呢?很简单,有浅拷贝就会有深拷贝,深拷贝呢,就是将所有东西都复制一遍给新对象,解除你的所有后顾之忧。

cf35826119cec49c0729a0590426433.png


Atas ialah kandungan terperinci python如何克隆一个 list. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan