- 近期在写代码时,脚本怎么跑都跑不通,查了半天,结果是犯了一个低级错误。
- 脚本中需要复制原列表的值,而我直接使用“=”赋值,代码示例如下:
list_old = [1,2,3] list_new = list_old
- 这样的结果就是,当我在试图修改新列表时,原列表的值也会同样被修改。
- 正确的方法应该是使用仅复制列表值的方法。
- 此篇文章记录一下复制列表的各种方法,算是一个总结,也算是对自己的提醒,希望不会再犯这种低级错误。
文章目录
一、直接赋值
- 这种方法就是上述情况
list_old = [1,2,3] list_new = list_old
- 直接赋值的情况下,原列表和新列表都指向同一个列表对象。
- 例如,往新列表中添加一个元素,打印旧列表数据会发现同样也添加了一个元素
二、列表复制方法(list.copy() )
-
这种方法仅会复制列表内的值
list_old = [1,2,3] list_new = list_old.copy()
-
新旧两个列表指向两个有相同值的列表对象
-
往新列表中添加一个元素,旧列表将不收到影响。
三、重新构造列表
- 接下里几种方法都比较类似,都是把旧列表内的数据取出来,再重新构造为新的列表
- 所以只做一个简单的介绍,选择合适的方法即可。
1. 利用列表索引
list_old = [1,2,3]
list_new = list_old[:]
2. 利用list()构造列表
list_old = [1,2,3]
list_new = list(list_old)
3. 利用extend()构造列表
extend() 函数:在列表末尾一次性追加另一个序列中的多个值
list_old = [1,2,3]
list_new = []
list_new = list_new.extend(list_old)
4. 利用for + append()
list_old = [1,2,3]
list_new = []
for i in list_old:
list_new.append(i)
四、深拷贝copy.deepcopy()
- 注意:以上方法只是浅拷贝,简单来说 只会拷贝列表的一层。
- 比如:
list_old = [1,2,3,[4,5,6]] list_new = list_old.copy()
- 这种情况下,只复制了第一次列表元素,但如果对第二层列表元素“[4,5,6]”进行操作,将会同时影响新旧列表。
- 此时新旧列表内的,第二层元素仍然是指向同一个列表“[4,5,6]”
- 这时就需要用到深拷贝
import copy list_old = [1,2,3,[4,5,6]] list_new = copy.deepcopy(list_old)
- 这样一来操作新列表的元素“[4,5,6]”,将不会影响到旧列表
- 这样一来操作新列表的元素“[4,5,6]”,将不会影响到旧列表
————————————————————————————————————————————
本人运营的博客同名公众号【软件测试必备技能】不定期会上传测试相关资料,可点击文章下方二维码,前往领取~