回答:
3つのバージョンすべてが異なることを行います。
B = A
これにより、B
すでに名前が付けられている既存のオブジェクトに新しい名前がバインドされA
ます。その後、それらは同じオブジェクトを参照するため、1つをその場で変更すると、もう1つのオブジェクトでも変更が表示されます。
B[:] = A
(B[:]=A[:]
?と同じ)
これにより、の値がA
既存の配列にコピーされますB
。これが機能するには、2つのアレイが同じ形状でなければなりません。B[:] = A[:]
同じことB = A[:]
を行います(ただし、1のようなことを行います)。
numpy.copy(B, A)
これは正しい構文ではありません。たぶんB = numpy.copy(A)
。これは2とほぼ同じですが、B
配列を再利用するのではなく、新しい配列を作成します。以前のB
値への参照が他にない場合、最終結果は2と同じになりますが、コピー中に一時的により多くのメモリを使用します。
またはnumpy.copyto(B, A)
、あなたはを意味し、それは合法であり、2と同等ですか?
but B = A[:] would do something more like 1
ですか?これによると、stackoverflow.com / new_list = old_list[:]
a / 2612815もコピーです。
some_array[:]
を実行すると、新しい配列オブジェクトが作成されますが、その新しいオブジェクトは、コピーされていない元の配列と同じメモリのビューになります。だから私はそれがもっと似ていると言ったB = A
。実際のコピーが必要とするそれぞれのO(1)
ものではなく、スペースと時間しかかかりませんO(n)
。
B=A
参照を作成しますB[:]=A
コピーを作るnumpy.copy(B,A)
コピーを作る最後の2つには追加のメモリが必要です。
使用する必要がある深いコピーを作成するには B = copy.deepcopy(A)
B[:] = A
ませんA = np.array([[1,2,3],[4,5]]); B = np.array([None,None], dtype='O')
。今してみてくださいB[:] = A; B[0][0]=99
、これは両方の最初の要素を変更しますAとB!私の知る限り、numpy-arrayであっても、ディープコピーを保証する方法は他にありませんcopy.deepcopy