在python中复制数组并操作

2024-10-01 13:45:27 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在加载一个文件“数据.插补“在变量'x'中是二维的。{cd2>的副本{cd2}是'y'弹出第一个数组(y是2D)。为什么变化反映在x上?(同时弹出'x'中的第一个数组)

ip = open('data.meanimputation','r')
x = pickle.load(ip)
y = x
y.pop(0)

一开始,len(x) == len(y)。即使在y.pop(0)len(x) == len(y)之后。为什么?我怎样才能避免呢?在


Tags: 文件数据ipdatalen副本load数组
2条回答

y = x不复制任何内容。它将名称y绑定到x引用的同一对象。在Python中,对裸名称的赋值永远不会复制任何内容。在

如果你想复制一个对象,你需要显式地复制它,使用你试图复制的对象可用的任何方法。您没有说明x是什么类型的对象,因此无法说明如何复制它,但是copy模块提供了一些适用于多种类型的函数。另请参见this answer。在

使用y = x[:]代替y = xy = x表示{}和{}现在都指向同一个对象。在

看看这个例子:

>>> x=[1,2,3,4]
>>> y=x
>>> y is x
True          # it means both y and x are just references to a same object [1,2,3,4], so changing either of y or x will affect [1,2,3,4]
>>> y=x[:]     # this makes a copy of x and assigns that copy to y,
>>> y is x     # y & x now point to different object, so changing one will not affect the other.
False

如果x是list is list of list,那么[:]就没有用了:

^{pr2}$

在这种情况下,您应该使用copy模块的deepcopy()函数,它生成对象的非浅层副本。在

相关问题 更多 >