Customize Consent Preferences

We use cookies to help you navigate efficiently and perform certain functions. You will find detailed information about all cookies under each consent category below.

The cookies that are categorized as "Necessary" are stored on your browser as they are essential for enabling the basic functionalities of the site. ... 

Always Active

Necessary cookies are required to enable the basic features of this site, such as providing secure log-in or adjusting your consent preferences. These cookies do not store any personally identifiable data.

No cookies to display.

Functional cookies help perform certain functionalities like sharing the content of the website on social media platforms, collecting feedback, and other third-party features.

No cookies to display.

Analytical cookies are used to understand how visitors interact with the website. These cookies help provide information on metrics such as the number of visitors, bounce rate, traffic source, etc.

No cookies to display.

Performance cookies are used to understand and analyze the key performance indexes of the website which helps in delivering a better user experience for the visitors.

No cookies to display.

Advertisement cookies are used to provide visitors with customized advertisements based on the pages you visited previously and to analyze the effectiveness of the ad campaigns.

No cookies to display.

3.9 Αντιγραφή στοιχείων λίστας

Στην Python, υπάρχουν διάφοροι τρόποι για να αντιγράψετε μια λίστα. Είναι σημαντικό να καταλάβετε τη διαφορά μεταξύ μιας απλής εκχώρησης και μιας πραγματικής αντιγραφής.
Όταν χρησιμοποιούμε απλή εκχώρηση μιας λίστας σε μια νέα μεταβλητή, δημιουργείται μια νέα αναφορά στην ίδια λίστα. Αυτό σημαίνει ότι οποιαδήποτε αλλαγή γίνεται στη μία λίστα θα επηρεάζει και την άλλη, καθώς και οι δύο μεταβλητές αναφέρονται στην ίδια αποθήκευση μνήμης. Ας δούμε ένα παράδειγμα:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
original_list = [1, 2, 3]
new_list = original_list
# Αλλαγή στην αρχική λίστα
original_list.append(4)
print(new_list) # Εκτυπώνει '[1, 2, 3, 4]'
original_list = [1, 2, 3] new_list = original_list # Αλλαγή στην αρχική λίστα original_list.append(4) print(new_list) # Εκτυπώνει '[1, 2, 3, 4]'
original_list = [1, 2, 3]
new_list = original_list

# Αλλαγή στην αρχική λίστα
original_list.append(4)

print(new_list)  # Εκτυπώνει '[1, 2, 3, 4]'

Η μέθοδος copy() χρησιμοποιείται για τη δημιουργία μιας πραγματικής αντιγραφής μιας λίστας. Όταν χρησιμοποιείτε τη μέθοδο copy(), δημιουργείται μια νέα λίστα που περιέχει τα ίδια στοιχεία με την αρχική λίστα, αλλά ανεξάρτητη από αυτήν. Οποιεσδήποτε αλλαγές γίνονται σε μία από τις δύο λίστες δεν επηρεάζουν την άλλη. Ένα παράδειγμα χρήσης της μεθόδου copy() είναι:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
original_list = [1, 2, 3] # Αρχική λίστα
new_list = original_list.copy() # Δημιουργία πραγματικής αντιγραφής της λίστας
# Εδώ μπορούμε να προσθέσουμε, να αφαιρέσουμε ή να τροποποιήσουμε στοιχεία της original_list ή της new_list
# Οποιεσδήποτε αλλαγές γίνονται σε μία από τις δύο λίστες, δεν επηρεάζουν την άλλη
print(original_list) # Εκτύπωση της αρχικής λίστας
print(new_list) # Εκτύπωση της αντιγραμμένης λίστας
original_list = [1, 2, 3] # Αρχική λίστα new_list = original_list.copy() # Δημιουργία πραγματικής αντιγραφής της λίστας # Εδώ μπορούμε να προσθέσουμε, να αφαιρέσουμε ή να τροποποιήσουμε στοιχεία της original_list ή της new_list # Οποιεσδήποτε αλλαγές γίνονται σε μία από τις δύο λίστες, δεν επηρεάζουν την άλλη print(original_list) # Εκτύπωση της αρχικής λίστας print(new_list) # Εκτύπωση της αντιγραμμένης λίστας
original_list = [1, 2, 3]  # Αρχική λίστα
new_list = original_list.copy()  # Δημιουργία πραγματικής αντιγραφής της λίστας

# Εδώ μπορούμε να προσθέσουμε, να αφαιρέσουμε ή να τροποποιήσουμε στοιχεία της original_list ή της new_list
# Οποιεσδήποτε αλλαγές γίνονται σε μία από τις δύο λίστες, δεν επηρεάζουν την άλλη

print(original_list)  # Εκτύπωση της αρχικής λίστας
print(new_list)  # Εκτύπωση της αντιγραμμένης λίστας

Στον παραπάνω κώδικα, δημιουργούμε μια αρχική λίστα original_list με τις τιμές [1, 2, 3]. Στη συνέχεια, χρησιμοποιούμε τη μέθοδο copy() για να δημιουργήσουμε μια πραγματική αντιγραφή της αρχικής λίστας και την αποθηκεύουμε στη μεταβλητή new_list.

Κατόπιν, μπορούμε να προσθέσουμε, να αφαιρέσουμε ή να τροποποιήσουμε στοιχεία στις λίστες original_list και new_list, ανεξάρτητα η μία από την άλλη. Οποιεσδήποτε αλλαγές γίνονται σε μία από τις δύο λίστες, δεν θα επηρεάσουν την άλλη.

[adinserter block=”2″]

Τέλος, εκτυπώνουμε την αρχική λίστα με τη χρήση της original_list και την αντιγραμμένη λίστα με τη χρήση της new_list, για να επιβεβαιώσουμε ότι έχουν διατηρηθεί χωριστά.

Ένας ακόμα τρόπος να δημιουργήσετε μια αντιγραφή μιας λίστας είναι να χρησιμοποιήσετε το slicing. Το slicing σας επιτρέπει να επιλέξετε ένα υποσύνολο στοιχείων από μια λίστα, με βάση τις θέσεις των δεικτών.

Για να δημιουργήσετε μια αντιγραφή μιας λίστας χρησιμοποιώντας το slicing, μπορείτε να κάνετε το εξής:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
original_list = [1, 2, 3] # Αρχική λίστα
new_list = original_list[:] # Αντιγραφή της αρχικής λίστας χρησιμοποιώντας το slicing
# Εκτύπωση των δύο λιστών
print("Αρχική λίστα:", original_list)
print("Νέα λίστα:", new_list)
original_list = [1, 2, 3] # Αρχική λίστα new_list = original_list[:] # Αντιγραφή της αρχικής λίστας χρησιμοποιώντας το slicing # Εκτύπωση των δύο λιστών print("Αρχική λίστα:", original_list) print("Νέα λίστα:", new_list)
original_list = [1, 2, 3]  # Αρχική λίστα
new_list = original_list[:]  # Αντιγραφή της αρχικής λίστας χρησιμοποιώντας το slicing

# Εκτύπωση των δύο λιστών
print("Αρχική λίστα:", original_list)
print("Νέα λίστα:", new_list)

Ο παραπάνω κώδικας δημιουργεί μια αντιγραφή της αρχικής λίστας original_list χρησιμοποιώντας το slicing. Η νέα λίστα new_list περιέχει τα ίδια στοιχεία με την αρχική λίστα, αλλά είναι ανεξάρτητη από αυτήν. Τροποποιήσεις σε μία από τις λίστες δεν επηρεάζουν την άλλη.

Η εντολή original_list[:] δηλώνει το slicing της αρχικής λίστας χωρίς να ορίζεται αρχή ή τέλος του slicing. Αυτό έχει ως αποτέλεσμα να επιλεγούν όλα τα στοιχεία της λίστας, δημιουργώντας έτσι μια πλήρη αντιγραφή της.

Τέλος, ο κώδικας εκτυπώνει τόσο την αρχική λίστα όσο και τη νέα λίστα για να δείξει ότι η αντιγραφή έχει πραγματοποιηθεί με επιτυχία.

Οι παραπάνω τρόποι πραγματικά παράγουν μια πραγματική αντιγραφή της λίστας, επιτρέποντάς σας να διατηρήσετε δύο ξεχωριστές και ανεξάρτητες λίστες με τα ίδια στοιχεία. Η επιλογή της κατάλληλης μεθόδου εξαρτάται από τις ανάγκες σας και την εκάστοτε περίπτωση.

  • Η απλή εκχώρηση (new_list = original_list) δημιουργεί μια αναφορά στην ίδια λίστα, οπότε αν τροποποιηθεί η μία λίστα, θα επηρεαστεί και η άλλη.
  • Η μέθοδος copy() δημιουργεί μια επιφανειακή αντιγραφή, όπου οι αντικείμενοι της λίστας είναι οι ίδιοι με την αρχική λίστα. Αν τροποποιηθεί ένας αντικείμενος μέσα στη λίστα, θα επηρεαστεί και η άλλη λίστα.
  • Η χρήση του slicing (new_list = original_list[:]) δημιουργεί μια πλήρη αντιγραφή της λίστας, επιτρέποντάς σας να διατηρήσετε δύο ανεξάρτητες λίστες. Οποιαδήποτε τροποποίηση γίνεται σε μία από τις λίστες δεν επηρεάζει την άλλη.

Επομένως, είναι σημαντικό να επιλέξετε τη μέθοδο που καλύπτει τις ανάγκες σας για μια αντιγραφ

ή λίστας σε κάθε συγκεκριμένη περίπτωση.

Για να δημιουργήσετε μια βαθιά αντιγραφή (deep copy) της λίστας, που περιλαμβάνει αντίγραφα όχι μόνο των στοιχείων της λίστας αλλά και των εσωτερικών αντικειμένων, μπορείτε να χρησιμοποιήσετε την ενσωματωμένη βιβλιοθήκη copy της Python και τη συνάρτηση deepcopy().

Για να το κάνετε αυτό, πρέπει να εισάγετε τη βιβλιοθήκη copy και να χρησιμοποιήσετε τη συνάρτηση deepcopy() όπως παρακάτω:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
import copy
# Εισαγωγή της βιβλιοθήκης copy
# Η βιβλιοθήκη copy παρέχει τη συνάρτηση deepcopy() για βαθιά αντιγραφή
original_list = [1, 2, [3, 4]]
# Δημιουργία μιας αρχικής λίστας με αριθμούς και μια εμφωλευμένη λίστα
deep_copy_list = copy.deepcopy(original_list)
# Χρήση της συνάρτησης deepcopy() για να δημιουργηθεί μια βαθιά αντιγραφή της original_list
# Η βαθιά αντιγραφή περιλαμβάνει αντιγραφή όλων των εσωτερικών αντικειμένων
# Οποιεσδήποτε αλλαγές γίνονται στη deep_copy_list δεν επηρεάζουν την original_list
# Και αντίστροφα, αλλαγές στην original_list δεν επηρεάζουν τη deep_copy_list
import copy # Εισαγωγή της βιβλιοθήκης copy # Η βιβλιοθήκη copy παρέχει τη συνάρτηση deepcopy() για βαθιά αντιγραφή original_list = [1, 2, [3, 4]] # Δημιουργία μιας αρχικής λίστας με αριθμούς και μια εμφωλευμένη λίστα deep_copy_list = copy.deepcopy(original_list) # Χρήση της συνάρτησης deepcopy() για να δημιουργηθεί μια βαθιά αντιγραφή της original_list # Η βαθιά αντιγραφή περιλαμβάνει αντιγραφή όλων των εσωτερικών αντικειμένων # Οποιεσδήποτε αλλαγές γίνονται στη deep_copy_list δεν επηρεάζουν την original_list # Και αντίστροφα, αλλαγές στην original_list δεν επηρεάζουν τη deep_copy_list
import copy

# Εισαγωγή της βιβλιοθήκης copy
# Η βιβλιοθήκη copy παρέχει τη συνάρτηση deepcopy() για βαθιά αντιγραφή

original_list = [1, 2, [3, 4]]
# Δημιουργία μιας αρχικής λίστας με αριθμούς και μια εμφωλευμένη λίστα

deep_copy_list = copy.deepcopy(original_list)
# Χρήση της συνάρτησης deepcopy() για να δημιουργηθεί μια βαθιά αντιγραφή της original_list
# Η βαθιά αντιγραφή περιλαμβάνει αντιγραφή όλων των εσωτερικών αντικειμένων

# Οποιεσδήποτε αλλαγές γίνονται στη deep_copy_list δεν επηρεάζουν την original_list
# Και αντίστροφα, αλλαγές στην original_list δεν επηρεάζουν τη deep_copy_list

Στο παραπάνω παράδειγμα, η γραμμή import copy εισάγει τη βιβλιοθήκη copy της Python, που περιέχει τη συνάρτηση deepcopy().

Στη συνέχεια, δημιουργείται μια λίστα original_list που περιλαμβάνει αριθμούς και μια εμφωλευμένη λίστα. Η συνάρτηση deepcopy() καλείται για να δημιουργήσει μια βαθιά αντιγραφή της original_list και να την αποθηκεύσει στη μεταβλητή deep_copy_list.

Αυτό σημαίνει ότι η deep_copy_list θα περιέχει μια πλήρη ανεξάρτητη αντιγραφή της original_list, συμπεριλαμβανομένων των εσωτερικών αντικειμένων. Οι αλλαγές που γίνονται στη deep_copy_list δεν θα επηρεάζουν την original_list και αντίστροφα.

[adinserter block=”3″]

Η χρήση της συνάρτησης deepcopy() είναι χρήσιμη όταν έχετε πολύπλοκες δομές δεδομένων, όπως λίστες που περιέχουν άλλες λίστες ή αντικείμενα, και θέλετε να διατηρήσετε την πλήρη ανεξαρτησία μεταξύ τους.

Δεν μπορείτε να αντιγράψετε απλά μια λίστα πληκτρολογώντας list2 = list1, επειδή θα δημιουργήσετε μια αναφορά στην ίδια λίστα. Οπότε, οι αλλαγές που γίνονται στη list1 θα επηρεάζουν αυτόματα και τη list2.

Για να πραγματοποιήσετε μια αντιγραφή της λίστας, μπορείτε να χρησιμοποιήσετε την ενσωματωμένη μέθοδο copy(). Αν πάρουμε ως παράδειγμα την λίστα list1, η αντιγραφή μπορεί να γίνει ως εξής: list2 = list1.copy(). Με αυτόν τον τρόπο, δημιουργείται μια νέα λίστα list2 με τα ίδια στοιχεία της αρχικής list1, αλλά είναι ανεξάρτητη από αυτήν. Έτσι, οποιαδήποτε αλλαγή γίνεται στη list1 δεν θα επηρεάσει την list2 και αντίστροφα.

Έτσι, η μέθοδος copy() είναι ένας ασφαλής τρόπος για να δημιουργήσετε μια ανεξάρτητη αντιγραφή μιας λίστας στην Python.

Παράδειγμα:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
list1 = ["apple", "banana", "cherry"]
list2 = list1.copy() # Δημιουργία αντιγράφου της λίστας list1
print(list2) # Εκτύπωση του αντιγράφου list2
list1 = ["apple", "banana", "cherry"] list2 = list1.copy() # Δημιουργία αντιγράφου της λίστας list1 print(list2) # Εκτύπωση του αντιγράφου list2
list1 = ["apple", "banana", "cherry"]
list2 = list1.copy()  # Δημιουργία αντιγράφου της λίστας list1
print(list2)  # Εκτύπωση του αντιγράφου list2

Η έξοδος του παραπάνω κώδικα θα είναι:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
['apple', 'banana', 'cherry']
['apple', 'banana', 'cherry']
['apple', 'banana', 'cherry']

Ο παραπάνω κώδικας δημιουργεί μια λίστα list1 με στοιχεία “apple”, “banana” και “cherry”. Στη συνέχεια, χρησιμοποιείται η μέθοδος copy() για να δημιουργηθεί μια αντιγραφή της λίστας list1, η οποία αποθηκεύεται στη μεταβλητή list2. Τέλος, εκτυπώνεται η λίστα list2, η οποία περιέχει τα ίδια στοιχεία με την αρχική λίστα list1.

Ένας άλλος τρόπος για να κάνετε αντιγραφή μιας λίστας είναι να χρησιμοποιήσετε την ενσωματωμένη μέθοδο list().

Παράδειγμα:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
list1 = ["apple", "banana", "cherry"]
list2 = list(list1)
print(list2)
list1 = ["apple", "banana", "cherry"] list2 = list(list1) print(list2)
list1 = ["apple", "banana", "cherry"]
list2 = list(list1)
print(list2)

Η έξοδος του παραπάνω κώδικα θα είναι:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
['apple', 'banana', 'cherry']
['apple', 'banana', 'cherry']
['apple', 'banana', 'cherry']

Στον παραπάνω κώδικα, χρησιμοποιείται η ενσωματωμένη μέθοδος list() για να δημιουργηθεί ένα αντίγραφο της λίστας list1. Η μέθοδος list() δέχεται μια επαρκή παράμετρο (σε αυτήν την περίπτωση τη λίστα list1) και επιστρέφει μια νέα λίστα που περιέχει τα ίδια στοιχεία. Η νέα λίστα αποθηκεύεται στη μεταβλητή list2. Τέλος, εκτυπώνεται η λίστα list2, η οποία περιέχει τα ίδια στοιχεία με την αρχική λίστα list1

9 Ιουνίου, 2023
top
error: Content is protected !!
Μετάβαση σε γραμμή εργαλείων