Yanıtlar:
Her üç sürüm de farklı şeyler yapar:
B = A
Bu, B
önceden adlandırılmış mevcut nesneye yeni bir ad bağlar A
. Daha sonra aynı nesneye atıfta bulunurlar, bu nedenle birini yerinde değiştirirseniz, değişikliği diğerinde de görürsünüz.
B[:] = A
(aynı B[:]=A[:]
?)
Bu, değerleri A
mevcut bir diziye kopyalar B
. Bunun çalışması için iki dizinin aynı şekle sahip olması gerekir. B[:] = A[:]
aynı şeyi yapar (ancak B = A[:]
1'e benzer bir şey yapar ).
numpy.copy(B, A)
Bu yasal sözdizimi değildir. Muhtemelen demek istedin B = numpy.copy(A)
. Bu neredeyse 2 ile aynıdır, ancak diziyi yeniden kullanmak yerine yeni bir dizi oluşturur B
. Önceki B
değere başka referanslar yoksa, sonuç 2 ile aynı olur, ancak kopyalama sırasında geçici olarak daha fazla bellek kullanır.
Ya da belki numpy.copyto(B, A)
hangisinin yasal olduğunu ve 2'ye eşdeğer olduğunu mu kastediyorsunuz ?
but B = A[:] would do something more like 1
? Bu stackoverflow.com/a/2612815'e göre new_list = old_list[:]
de bir kopyadır.
some_array[:]
yeni bir dizi nesnesi yaratacaktır, ancak bu yeni nesne, kopyalanmamış olan orijinal diziyle aynı belleğin bir görünümü olacaktır. Bu yüzden daha çok benziyor dedim B = A
. Her bir gerçek kopyanın ihtiyaç duyacağı O(1)
alan yerine yalnızca yer ve zaman alır O(n)
.
B=A
referans oluştururB[:]=A
bir kopya yaparnumpy.copy(B,A)
bir kopya yaparson ikisi ek belleğe ihtiyaç duyar.
Derin bir kopya oluşturmak için kullanmanız gerekir B = copy.deepcopy(A)
B[:] = A
yok değil nesne tipi, örn dizileri derin bir kopyasını yapmak A = np.array([[1,2,3],[4,5]]); B = np.array([None,None], dtype='O')
. Şimdi deneyin B[:] = A; B[0][0]=99
, bu hem A hem de B'deki ilk öğeyi değiştirecek ! Bildiğim copy.deepcopy
Bu benim için çalışan tek cevap:
B=numpy.array(A)