Δημοσιεύτηκε: 26 Μαρ 2012, 02:35
Και μιας και λέμε για Slices ,
μην ξεχνάμε ότι το Newlist = Oldlist[:]
κάνει shallow copy (μια νέα λίστα αλλά όχι deep copy..)
διότι παρουσιάζονται ορισμένες φορές με τις λίστες της python προβλήματα (εξαρτάται το τι θές να κάνεις )
όπως δημιουργείται (αναφορά) reference σε ένα αντικείμενο και όχι αντίγραφο (copy)
πχ
αν δεν μας ενδιαφέρει να γίνονται αλλαγές ταυτόχρονα σε όλα τα objects απλά κάνουμε ένα αντίγραφο
πχ
αν όμως έχουμε λίστες μέσα σε λίστες τότε πρέπει να γίνονται αναδρομικά αντίγραφα... οπότε και πάμε στο copy module (deepcopy)
περισσότερα
http://docs.python.org/library/copy.html
http://www.python-course.eu/deep_copy.php
μην ξεχνάμε ότι το 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