python如何克隆一个 list

silencement
풀어 주다: 2019-05-25 16:18:18
원래의
3075명이 탐색했습니다.

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


위 내용은 python如何克隆一个 list의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
최신 이슈
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!