Sao chép danh sách python 2

Các câu lệnh gán trong Python không sao chép các đối tượng, chúng tạo ra các ràng buộc giữa mục tiêu và đối tượng. Đối với các bộ sưu tập có thể thay đổi hoặc chứa các mục có thể thay đổi, đôi khi cần có một bản sao để người dùng có thể thay đổi một bản sao mà không cần thay đổi bản kia. Mô-đun này cung cấp các thao tác sao chép nông và sâu chung chung [được giải thích bên dưới]

Tóm tắt giao diện

copy.copy [ x ]

Trả lại một bản sao nông của x

copy.deepcopy [ x ]

Trả lại một bản sao sâu của x

ngoại lệ copy.error

Tăng cho các lỗi mô-đun cụ thể

Sự khác biệt giữa sao chép nông và sâu chỉ liên quan đến các đối tượng phức hợp [các đối tượng chứa các đối tượng khác, như danh sách hoặc thể hiện của lớp]

  • Một bản sao nông xây dựng một đối tượng ghép mới và sau đó [trong phạm vi có thể] chèn vào đó các tham chiếu tới các đối tượng được tìm thấy trong bản gốc

  • Một bản sao sâu xây dựng một đối tượng phức hợp mới và sau đó, theo cách đệ quy, chèn các bản sao của các đối tượng được tìm thấy trong bản gốc vào đó.

Hai vấn đề thường tồn tại với thao tác sao chép sâu mà không tồn tại với thao tác sao chép nông

  • Các đối tượng đệ quy [các đối tượng phức hợp, trực tiếp hoặc gián tiếp, chứa tham chiếu đến chính chúng] có thể gây ra vòng lặp đệ quy

  • Bởi vì bản sao sâu sao chép mọi thứ mà nó có thể sao chép quá nhiều, chẳng hạn như dữ liệu được chia sẻ giữa các bản sao

Chức năng tránh những vấn đề này bằng cách

  • giữ một từ điển “ghi nhớ” về các đối tượng đã được sao chép trong quá trình sao chép hiện tại;

  • cho phép các lớp do người dùng định nghĩa ghi đè hoạt động sao chép hoặc tập hợp các thành phần được sao chép

Mô-đun này không sao chép các loại như mô-đun, phương thức, dấu vết ngăn xếp, khung ngăn xếp, tệp, ổ cắm, cửa sổ, mảng hoặc bất kỳ loại tương tự nào. Nó thực hiện “sao chép” các hàm và lớp [nông và sâu], bằng cách trả lại đối tượng ban đầu không thay đổi;

Bản sao nông của từ điển có thể được tạo bằng cách sử dụng và của danh sách bằng cách chỉ định một phần của toàn bộ danh sách, ví dụ: copy.0

Đã thay đổi trong phiên bản 2. 5. Đã thêm chức năng sao chép.

Các lớp có thể sử dụng cùng một giao diện để kiểm soát việc sao chép mà chúng sử dụng để kiểm soát việc tẩy. Xem mô tả của mô-đun để biết thông tin về các phương pháp này. Mô-đun không sử dụng mô-đun đăng ký

Để một lớp định nghĩa việc triển khai sao chép của riêng mình, nó có thể định nghĩa các phương thức đặc biệt copy.4 và copy.5. Cái trước được gọi để thực hiện thao tác sao chép nông; . Cái sau được gọi để thực hiện thao tác sao chép sâu; . Nếu việc triển khai copy.5 cần tạo một bản sao sâu của một thành phần, thì nó sẽ gọi hàm với thành phần đó làm đối số đầu tiên và từ điển ghi nhớ làm đối số thứ hai

Các phương thức Copy List[] của Python trả về một bản sao nông của danh sách [trả về một danh sách mới mà không sửa đổi danh sách ban đầu]

Đôi khi, có nhu cầu sử dụng lại bất kỳ đối tượng nào, do đó các phương thức sao chép luôn hữu ích. Python trong ngôn ngữ của nó cung cấp một số cách để đạt được điều này. Bài viết cụ thể này nhằm mục đích chứng minh phương pháp sao chép có trong danh sách. Vì danh sách này được sử dụng rộng rãi nên việc sao chép nó cũng là cần thiết

danh sách Python. sao chép [] Cú pháp

cú pháp. danh sách. sao chép[]

Thông số. Phương thức copy[] không nhận bất kỳ tham số nào

trả lại. Trả về một bản sao nông của một danh sách. Bản sao nông có nghĩa là mọi sửa đổi trong danh sách mới sẽ không được phản ánh trong danh sách gốc.  
 

ví dụ 1. Minh họa hoạt động của danh sách. sao chép[]

Ở đây chúng tôi sẽ tạo một danh sách và sau đó tạo một bản sao nông bằng cách sử dụng danh sách. sao chép [] bằng Python

Python3




# Python 3 code to demonstrate

# working of list.copy[]

 

# Initializing list

lis1= [1,

list 1 after modification:
 [1, [2, 999], 4, 5]
list 2 after modification:
 [1, [2, 999], 4, 5]
list 3 after modification:
 [1, [2, 999], 4]
list 4 after modification:
 [1, [2, 3], 4]
0_______35_______
list 1 after modification:
 [1, [2, 999], 4, 5]
list 2 after modification:
 [1, [2, 999], 4, 5]
list 3 after modification:
 [1, [2, 999], 4]
list 4 after modification:
 [1, [2, 3], 4]
2,
list 1 after modification:
 [1, [2, 999], 4, 5]
list 2 after modification:
 [1, [2, 999], 4, 5]
list 3 after modification:
 [1, [2, 999], 4]
list 4 after modification:
 [1, [2, 3], 4]
4
list 1 after modification:
 [1, [2, 999], 4, 5]
list 2 after modification:
 [1, [2, 999], 4, 5]
list 3 after modification:
 [1, [2, 999], 4]
list 4 after modification:
 [1, [2, 3], 4]
5

 

list 1 after modification:
 [1, [2, 999], 4, 5]
list 2 after modification:
 [1, [2, 999], 4, 5]
list 3 after modification:
 [1, [2, 999], 4]
list 4 after modification:
 [1, [2, 3], 4]
6

list 1 after modification:
 [1, [2, 999], 4, 5]
list 2 after modification:
 [1, [2, 999], 4, 5]
list 3 after modification:
 [1, [2, 999], 4]
list 4 after modification:
 [1, [2, 3], 4]
7=
list 1 after modification:
 [1, [2, 999], 4, 5]
list 2 after modification:
 [1, [2, 999], 4, 5]
list 3 after modification:
 [1, [2, 999], 4]
list 4 after modification:
 [1, [2, 3], 4]
9

 

# Python 3 code to demonstrate0

# Python 3 code to demonstrate1 # Python 3 code to demonstrate2# Python 3 code to demonstrate3 # Python 3 code to demonstrate4 # Python 3 code to demonstrate5# Python 3 code to demonstrate6

 

# Python 3 code to demonstrate7

# Python 3 code to demonstrate8# Python 3 code to demonstrate9# working of list.copy[]0

 

# working of list.copy[]1

# working of list.copy[]2

# Python 3 code to demonstrate1 # working of list.copy[]4# working of list.copy[]5 # working of list.copy[]6

# working of list.copy[]7# Python 3 code to demonstrate4 # Python 3 code to demonstrate5# Python 3 code to demonstrate6

# Python 3 code to demonstrate1 # Initializing list2# working of list.copy[]5 # Initializing list4# working of list.copy[]# Initializing list6

# working of list.copy[]7# Python 3 code to demonstrate4 # Python 3 code to demonstrate5lis10

Đầu ra

The new list created is : [1, 2, 3, 4]
The new list after adding new element : [1, 2, 3, 4, 5]
The old list after adding new element to new list  : [1, 2, 3, 4]

Ghi chú. Một bản sao nông có nghĩa là nếu chúng ta sửa đổi bất kỳ phần tử danh sách lồng nhau nào, các thay đổi sẽ được phản ánh trong cả hai danh sách khi chúng trỏ đến cùng một tham chiếu. Trong khi ở bản sao sâu, khi chúng tôi thêm một phần tử vào bất kỳ danh sách nào, chỉ danh sách đó được sửa đổi. Khi chúng ta sử dụng toán tử “=”[gán], danh sách mới đề cập đến cùng một đối tượng, do đó mọi thay đổi [chắp thêm, xóa, thay đổi giá trị] trong một danh sách đều được phản ánh trên cả hai. Nhưng khi chúng ta sử dụng danh sách. copy[], những thay đổi được thực hiện cho một danh sách hoặc không được phản ánh trên danh sách khác ngoại trừ trong các phần tử lồng nhau [như danh sách trong danh sách], Ở đây chúng ta nên sử dụng bản sao. deepcopy[] từ mô-đun sao chép để tránh sự cố này

Vui lòng tham khảo bài viết này Bản sao sâu vs Bản sao nông.  

  • Kỹ thuật sao chép sâu.  
    • Sử dụng bản sao. bản sao sâu []
  • Kỹ thuật sao chép nông.  
    • Sử dụng bản sao. sao chép[]
    • Sử dụng danh sách. sao chép[]
    • sử dụng cắt lát

ví dụ 2. Trình diễn kỹ thuật chép nông, chép sâu

Ở đây chúng tôi sẽ tạo một danh sách và sau đó tạo một bản sao nông bằng cách sử dụng danh sách. copy[] và deep Copy sử dụng deepcopy[] trong Python

Python3




# Python 3 code to demonstrate

lis12

lis13 lis14

 

# Initializing list

lis16_______32_______ [1=0_______0_______0,0_______2=4_______0_______4

list 1 after modification:
 [1, [2, 999], 4, 5]
list 2 after modification:
 [1, [2, 999], 4, 5]
list 3 after modification:
 [1, [2, 999], 4]
list 4 after modification:
 [1, [2, 3], 4]
5

 

=7

=8= lis16

 

[1

[2

[3

 

[4= [6

 

[7

[8= 10

 

11# Python 3 code to demonstrate9# working of list.copy[]0

14116_______34_______

list 1 after modification:
 [1, [2, 999], 4, 5]
list 2 after modification:
 [1, [2, 999], 4, 5]
list 3 after modification:
 [1, [2, 999], 4]
list 4 after modification:
 [1, [2, 3], 4]
5= ,0

 

# Python 3 code to demonstrate1# Python 3 code to demonstrate2,3,4

# Python 3 code to demonstrate1# Python 3 code to demonstrate2,7,8

# Python 3 code to demonstrate1# Python 3 code to demonstrate2

list 1 after modification:
 [1, [2, 999], 4, 5]
list 2 after modification:
 [1, [2, 999], 4, 5]
list 3 after modification:
 [1, [2, 999], 4]
list 4 after modification:
 [1, [2, 3], 4]
01
list 1 after modification:
 [1, [2, 999], 4, 5]
list 2 after modification:
 [1, [2, 999], 4, 5]
list 3 after modification:
 [1, [2, 999], 4]
list 4 after modification:
 [1, [2, 3], 4]
02

# Python 3 code to demonstrate1# Python 3 code to demonstrate2

list 1 after modification:
 [1, [2, 999], 4, 5]
list 2 after modification:
 [1, [2, 999], 4, 5]
list 3 after modification:
 [1, [2, 999], 4]
list 4 after modification:
 [1, [2, 3], 4]
05
list 1 after modification:
 [1, [2, 999], 4, 5]
list 2 after modification:
 [1, [2, 999], 4, 5]
list 3 after modification:
 [1, [2, 999], 4]
list 4 after modification:
 [1, [2, 3], 4]
06

Đầu ra

list 1 after modification:
 [1, [2, 999], 4, 5]
list 2 after modification:
 [1, [2, 999], 4, 5]
list 3 after modification:
 [1, [2, 999], 4]
list 4 after modification:
 [1, [2, 3], 4]

Phân tích độ phức tạp.  

Độ phức tạp về thời gian của việc tạo một bản sao của danh sách bằng phương thức copy[] là O[n], trong đó n là số phần tử trong danh sách. Điều này là do phương thức copy[] cần lặp qua tất cả các phần tử trong danh sách để tạo một danh sách mới chứa các phần tử giống nhau

Không gian phụ của việc tạo một bản sao của danh sách bằng phương thức copy[] cũng là O[n] do danh sách mới có cùng số lượng phần tử như danh sách ban đầu cần được tạo

Làm thế nào chúng ta có thể sao chép một danh sách trong Python?

Python - Sao chép danh sách .
❮ Trước Sau ❯
Thí dụ. Tạo một bản sao của danh sách bằng phương thức copy[]. thislist = ["táo", "chuối", "anh đào"] mylist = thislist. sao chép [] in [danh sách của tôi].
Thí dụ. Tạo một bản sao của danh sách bằng phương thức list[]. thislist = ["táo", "chuối", "anh đào"] mylist = list[thislist].
❮ Trước Sau ❯

Danh sách [] có tạo bản sao không?

Sử dụng phương thức tích hợp sẵn list[] để sao chép danh sách. Một cách khác để sao chép danh sách trong Python là sử dụng phương thức tích hợp sẵn list[]. Nó cũng tạo ra một bản sao nông có nghĩa là bất cứ khi nào một sửa đổi được thực hiện trong danh sách mới, nó sẽ không hiển thị trên danh sách cũ.

danh sách là gì [

Python cũng cho phép bạn lập chỉ mục từ cuối danh sách bằng cách sử dụng số âm, trong đó [-1] trả về phần tử cuối cùng .

Chủ Đề