python数组复制拷贝的方法分享

发布时间:2020-02-07编辑:脚本学堂
本文介绍下,python语言中有关数组复制与拷贝的一些内容,有需要的朋友参考学习下。

python中,可以直接通过等号赋值,其实它只是引用地址的传递。

例如:
 

复制代码 代码示例:
a = [1,2,3,4,5]
b=a
 

当a的值改变时,b的值也会随之改变。

如果希望b和a没有关系,可以这样:
 

复制代码 代码示例:
a = [1,2,3,4,5]
b=a[:]
 

这样a和b就是两个完全独立的数组。

附,python]关于list的复制
比如list,像:
 

复制代码 代码示例:
a=range(10)
b=a
 

其实b和a都是引用了同一个对象,即只要不给b重新一个list,那么,对b进行的操作,也会反应到a上面。
例如:
b.remove(7)
那么,a中的7也会被不见了。

然后,就是如何对值进行复制。
就是用上 [:] 。
那么:
 

复制代码 代码示例:
a=range(10)
b=a[:]

然后进行:
b.remove(7)
而结果是,a和b的值已经不一样了。

所以,python的tutorial中有以下的例子:
 

复制代码 代码示例:
>>> for x in a[:]: # make a slice copy of the entire list
... if len(x) > 6: a.insert(0, x)
...
>>> a
['defenestrate', 'cat', 'window', 'defenestrate']

如果没有a[:],那么,由于a一直在变化,以致进入死循环。
因此,要根据情况,对要不要使用复制list进行判断。

例如:
 

复制代码 代码示例:

>>> x=[1 for i in range(10)]
>>> for xx in x:
if(xx==1):x.remove(xx)

>>> x
[1, 1, 1, 1, 1]
>>>
 

而如果使用了[:]则会不同,因为它对复制的列表进行遍历,而不是对原列表进行遍历。
例如:
 

复制代码 代码示例:

>>> x=[1 for i in range(10)]
>>> for xx in x[:]:
if(xx==1):x.remove(xx)

>>> x
[]
>>>