我从这个[:]副本中经历了一些特殊的错误.
文档说[:]只是一个浅薄的副本,但似乎:
a = [1,2,3]
id(a)
3071203276L
b=a[:]
id(b)
3071234156L
Run Code Online (Sandbox Code Playgroud)
id(a)不等于id(b); 怎么只是一个浅的副本?
特殊情况:
import numpy as np
import random
a = np.array([1,2,3])
b=a[:]
random.shuffle(a)
Run Code Online (Sandbox Code Playgroud)
b 相应地改变.
Numpy回答:
numpy中的数组是后备存储上的视图/索引.
您可以复制视图,而无需复制后备存储...
a=numpy.array([1,2,3,4])
b=a[:] # copy of the array ("view" or "index"), not the storage
b.shape=(2,2)
print a
# [1 2 3 4]
print b
# [[1 2]
# [3 4]]
b *= 2
print a
# [2 4 6 8]
print b
# [[2 4]
# [6 8]]
Run Code Online (Sandbox Code Playgroud)
看看改变b如何影响?然而他们仍然有不同的形状.认为它们是数据的视图 ; 并且该b=a[:]行仅复制了此视图.我甚至可以修改它的形状b.因为它只是数据的索引,所以说明列和行位于内存中.
如果您想要numpy中的后备存储副本,请使用a.copy().