码迷,mamicode.com
首页 > 编程语言 > 详细

python3-copy与索引

时间:2018-12-04 18:50:21      阅读:170      评论:0      收藏:0      [点我收藏+]

标签:copy   import   imp   pytho   没有   [1]   port   pre   复制   

>>> import copy >>> x=[1,2,3] >>> z=copy.copy(x) >>> x [1, 2, 3] >>> z [1, 2, 3] >>> y=copy.deepcopy(x) >>> y [1, 2, 3] >>> z [1, 2, 3] >>>

列表直接赋值采用的是复制其引用,而不是值复制,而调用copy模块则实现真正的复制。

>>> y[1]=12
>>> z[0]=31
>>> x
[1, 2, 3]
>>> y
[1, 12, 3]
>>> z
[31, 2, 3]

copy和deepcopy都实现了数据的复制,但其实不然。
copy为浅copy,只复制了第一层数据,列表里存储的子列表,打印出来是子列表,其实,在内存里,列表里只是存储了子列表的内存地址,子列表在内存里是单独存储的
比如:

>>> x
[11, 23, [16, 11, 15]]
>>> z=copy.copy(x)
>>> x
[11, 23, [16, 11, 15]]
>>> z
[11, 23, [16, 11, 15]]
>>> z[0]=9
>>>
>>> z
[9, 23, [16, 11, 15]]
>>> x
[11, 23, [16, 11, 15]]
>>> z[2][0]=222
>>> z
[9, 23, [222, 11, 15]]
>>> x
[11, 23, [222, 11, 15]]

下面代码没有改变x的原因是因为z在第一层实现的复制,只是简单把第1层的第3个元素进行了替代。

>>> z[2]=[101,102,103]
>>> z
[9, 23, [101, 102, 103]]
>>> x
[11, 23, [222, 11, 15]]
>>>

deepcopy实现了完全复制

>>> x
[11, 23, [222, 11, 15]]
>>> y=copy.deepcopy(x)
>>> x
[11, 23, [222, 11, 15]]
>>> y
[11, 23, [222, 11, 15]]
>>> y[2][1]=10001
>>> y
[11, 23, [222, 10001, 15]]
>>> x
[11, 23, [222, 11, 15]]
>>>

正向索引与负向索引

>>> x=[1,2,3,4,5,6]
>>> x[-1]
6
>>> x[-2]
5
>>> x[1]
2
>>> x[0]
1

python3-copy与索引

标签:copy   import   imp   pytho   没有   [1]   port   pre   复制   

原文地址:http://blog.51cto.com/13959448/2325967

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!