Czy Python ma coś takiego jak System Java.ARraycopy? Nie chcę po prostu skopiować odniesienia (płytkiej kopii), ani nie chcę go pokroić (głęboka kopia w / nowa ref). Chcę zachować odniesienie docelowe (ponieważ mam wiele zmiennych wskazujących na tę samą listę) i skopiuj poszczególne komórki ze źródła do celu. Dokładnie jak arraykopia Java. Do tej pory jedyny sposób, w jaki mogę to znaleźć w Pythonie, ma napisać własne. W Javie jest bardziej występujący do korzystania z systemu

1
JeffHeaton 28 listopad 2013, 01:27

2 odpowiedzi

Najlepsza odpowiedź

Jeśli podążam za opisanym zachowaniem, przydział Plakietki jest specyńskim sposobem na to:

foo = range(10)
bar = foo
baz = range(10, 0, -1)
foo[0:4] = baz[0:4]

>>> foo
[10, 9, 8, 7, 4, 5, 6, 7, 8, 9]
>>> bar
[10, 9, 8, 7, 4, 5, 6, 7, 8, 9]

Jeśli źródło zawiera odniesienia do obiektów, które przypisuje odniesienia do tych samych obiektów do miejsca docelowego - jeśli chcesz głęboko skopiować dane źródłowe, myślę, że musisz zrobić coś takiego:

foo[0:4] = [copy.deepcopy(x) for x in baz[0:4]]
8
Peter DeGlopper 27 listopad 2013, 21:29

Update: Metoda Petera Deglopper jest lepsza. Idź na to.

Przepraszam, to najlepsze, co otrzymasz:

def arrayCopy(src, srcPos, dest, destPos, length):
    for i in range(length):
        dest[i + destPos] = src[i + srcPos]
1
Thomas Ahle 27 listopad 2013, 21:39