Δημοσιεύτηκε: 26 Μαρ 2012, 02:35
από sokoban4ever
Και μιας και λέμε για Slices ,
μην ξεχνάμε
ότι το Newlist = Oldlist[:]
κάνει shallow copy (μια νέα λίστα αλλά όχι deep copy..)
διότι παρουσιάζονται ορισμένες φορές με τις λίστες της python προβλήματα (εξαρτάται το τι θές να κάνεις )
όπως δημιουργείται (αναφορά) reference σε ένα αντικείμενο και όχι αντίγραφο (copy)
πχ
Κώδικας: Επιλογή όλων
In [2]: x= [1,2,3]

In [3]: y= x

In [4]: z= y

In [5]: x
Out[5]: [1, 2, 3]

In [6]: y
Out[6]: [1, 2, 3]

In [7]: z
Out[7]: [1, 2, 3]

In [8]: y[0]='?'

In [9]: y
Out[9]: ['?', 2, 3]

In [10]: x
Out[10]: ['?', 2, 3]

In [11]: y
Out[11]: ['?', 2, 3]

In [12]: z
Out[12]: ['?', 2, 3]

In [13]: z[0] = 1

In [14]: x
Out[14]: [1, 2, 3]

In [15]: y
Out[15]: [1, 2, 3]

In [16]: z
Out[16]: [1, 2, 3]



αν δεν μας ενδιαφέρει να γίνονται αλλαγές ταυτόχρονα σε όλα τα objects απλά κάνουμε ένα αντίγραφο
πχ
Κώδικας: Επιλογή όλων
In [17]: w = x[:]

In [18]: w[0] = ':)'

In [19]: w
Out[19]: [':)', 2, 3]

In [20]: x
Out[20]: [1, 2, 3]

In [21]: y
Out[21]: [1, 2, 3]

In [22]: z
Out[22]: [1, 2, 3]


αν όμως έχουμε λίστες μέσα σε λίστες τότε πρέπει να γίνονται αναδρομικά αντίγραφα... οπότε και πάμε στο copy module (deepcopy)
περισσότερα
http://docs.python.org/library/copy.html
http://www.python-course.eu/deep_copy.php