Python中list和dict的复制

列表List和字典Dictionary是在使用Python时重要且非常高效的数据类型。

但是,在需要复制这两类数据时,不同的复制方法,产生的结果也不一样。

先以dict为例,list的说明在下方。

1,用直接用“=”进行复制

以dict为例,创建一个dict1,将dict1直接赋值给dict2,

>>> dict1 = {"a":1,"b":2,"c":3,"d":4}
>>> dict2 = dict1
>>> dict1
{'a': 1, 'c': 3, 'b': 2, 'd': 4}
>>> dict2
{'a': 1, 'c': 3, 'b': 2, 'd': 4}

那么当对dict1进行操作时,dict2会发生什么?

>>> dict1.pop('a')
1
>>> dict1
{'c': 3, 'b': 2, 'd': 4}
>>> 
其中对dict1进行了一项的删除,并没有对dict2进行操作,那么来看看dict2

>>> dict2
{'c': 3, 'b': 2, 'd': 4}
>>> 
dict2的‘a'项也被删除了。

这是为什么?

因为在这里简单的用=赋值,其实只是指向一个对象,对其中一个进行操作,另一个也随之改变了。

如图所示:



2,dict使用copy()函数

接着,使用copy()将dict1拷贝给dict2。

>>> dict3 = dict1.copy()
>>> dict1
{'c': 3, 'b': 2, 'd': 4}
>>> dict3
{'c': 3, 'b': 2, 'd': 4}
>>> 
对dict1进行操作,dict3就不会受到影响

>>> dict1.pop('c')
3
>>> dict1
{'b': 2, 'd': 4}
>>> dict2
{'b': 2, 'd': 4}
>>> dict3
{'c': 3, 'b': 2, 'd': 4}
>>> 
采用copy()这种复制方式对其中一个进行操作并不会影响另一个,那是因为,它对复制的对象重新生成一个内存空间,dict1和dict3指向不同的两个内存空间。


>>> dict3.pop('b')
2
>>> dict1
{'b': 2, 'd': 4}
>>> dict2
{'b': 2, 'd': 4}
>>> dict3
{'c': 3, 'd': 4}
>>> 


3,关于List的复制

list的=赋值产生结果与dict类似,但是,List并没有copy()函数,所以在List中采用[:]来实现拷贝。

具体代码实现如下:

=复制:

>>> l1 = [1,2,3,4,5]
>>> l2 = l1
>>> l1
[1, 2, 3, 4, 5]
>>> l2
[1, 2, 3, 4, 5]
>>> l1.remove(3)
>>> l1
[1, 2, 4, 5]
>>> l2
[1, 2, 4, 5]

采用拷贝方式:

>>> l3 = l1[:]
>>> l1
[1, 2, 4, 5]
>>> l3
[1, 2, 4, 5]
>>> l3.remove(1)
>>> l1
[1, 2, 4, 5]
>>> l3
[2, 4, 5]
>>> l2
[1, 2, 4, 5]
>>> 





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值