当我想要复制列表而不链接到同一个对象时,我必须调用list。所以:
a = [1, 2, 3]
b = list(a)
a == b
True
a is b
False
当我有一个numpy数组时,等价物是什么
import numpy
a = numpy.ones(4)
b = XXX(a)?
提前致谢
答案 0 :(得分:3)
使用copy
- 方法:
b = a.copy()
答案 1 :(得分:-1)
您可以使用[:]
模式复制数组或列表(实际上,仅用于列表而不是数组。请参阅下面的更新。)
a = np.ones(4)
b = a[:]
>>> b
array([ 1., 1., 1., 1.])
>>> id(a)
4606143744
>>> id(b)
4606143984
<强>计时强>
a = np.random.randn(1000000)
%timeit -n 1000 a.copy()
1000 loops, best of 3: 1.1 ms per loop
%timeit -n 1000 a[:]
1000 loops, best of 3: 659 ns per loop
<强>更新强>
我通常会删除这样的错误帖子,但我要离开它,因为我认为这是有益的。
按预期为列表工作。
a = [1, 2, 3]
b = a[:]
b[2] = 0
>>> a
[1, 2, 3]
>>> b
[1, 2, 0]
但正如@Divakar指出的那样,这似乎不适用于Numpy阵列:
a = np.array([1, 2, 3])
b = a[:]
b[2] = 0
>>> a
array([1, 2, 0])
>>> b
array([1, 2, 0])
>>> id(a)
4600986400
>>> id(b)
4606142624
最好明确使用copy()
方法(例如b = a.copy()
)。