列表的拷贝

列表的复制
在之前的实训中,我们做过列表复制相关的练习,在题目中,我们的要求是使用 for 循环实现列表复制,可能有同学就会发现,为什么不直接新建一个变量,将原列表赋值给这个变量呢?如下面代码所示:

list1 = [1,2,3,4]
list2 = list1
print(list1)
print(list2)
执行结果:

[1,2,3,4]
[1,2,3,4]
从执行结果来看,确实是实现了列表的复制功能,但是实际上并没有实现列表的复制,如果对 list2 进行增删改操作时,list1也会发生相应的变化。

list1 = [1,2,3,4]
list2 = list1
list2.append(5)
print(list1)
print(list2)
执行结果:

[1, 2, 3, 4, 5]
[1, 2, 3, 4, 5]
在这里插入图片描述
浅拷贝//只保证了外层可以被改变,内层还是无法做到不一致
想要了解什么是浅拷贝,我们首先就需要列表嵌套的相关知识。在前面的实训中,我们可以了解到列表是可以嵌套的,列表内的元素还可以是列表。

list1 = [1,[2,3],4,5] # list1列表中的第二个元素也是一个列表,这就是一个嵌套列表
浅拷贝是复制列表的最外层,内存的嵌套的列表并不会复制。浅拷贝需要使用 copy 模块中的 copy 函数。

import copy
list1 = [1,[2,3],4,5]
list2 = copy.copy(list1) # 使用浅拷贝复制一个列表
list2.append(6) # list2末尾添加一个元素6
list2[1].append(6) # list2第二个元素的列表的末尾添加一个6
print(list1)
print(list2)
执行结果:

[1, [2, 3, 6], 4, 5]
[1, [2, 3, 6], 4, 5, 6]
从执行结果可以得知,两个列表的元素不一样了,但是列表中的嵌套列表还是一致的,浅拷贝只能拷贝表层,嵌套在列表内的列表并没有拷贝。

深拷贝
如果要彻底地产生一个完全独立的复制品,就需要使用深拷贝。深拷贝需要使用到 copy 模块中的 deepcopy 函数。

import copy
list1 = [1,[2,3],4,5]
list2 = copy.deepcopy(list1) # 使用深拷贝复制一个列表
list2.append(6) # list2末尾添加一个元素6
list2[1].append(6) # list2第二个元素的列表的末尾添加一个6
print(list1)
print(list2)
执行结果:

[1, [2, 3], 4, 5]
[1, [2, 3, 6], 4, 5, 6]

留下列表中非重复元祖

########## Begin ##########

第1步:使用 input 函数获取列表

import copy

list1 = eval(input())

第2步:去除列表内的非重复值,打印处理后的列表

list2 = copy.deepcopy(list1)
for x in range(len(list1)):
value = True
for y in range(len(list1)):
if x == y:
continue
if list1[x] == list1[y]:
value = False
break
if value:
list2.remove(list1[x])
print(list2)

########## End ##########

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值