Hướng dẫn how do you copy a list in python? - làm thế nào để bạn sao chép một danh sách trong python?

Trong hướng dẫn này, chúng tôi sẽ tìm hiểu về phương thức Danh sách Python () với sự trợ giúp của các ví dụ.

Phương thức

new_list = old_list.copy()
5 trả về một bản sao nông của danh sách.

Thí dụ

# mixed list
prime_numbers = [2, 3, 5]

# copying a list numbers = prime_numbers.copy()

print('Copied List:', numbers) # Output: Copied List: [2, 3, 5]


Sao chép () Cú pháp

Cú pháp của phương thức

new_list = old_list.copy()
5 là:

new_list = list.copy()

Sao chép () tham số

Phương thức

new_list = old_list.copy()
5 không lấy bất kỳ tham số nào.


sao chép () giá trị trả về

Phương thức

new_list = old_list.copy()
5 trả về một danh sách mới. Nó không sửa đổi danh sách ban đầu.


Ví dụ: Sao chép danh sách

# mixed list
my_list = ['cat', 0, 6.7]

# copying a list new_list = my_list.copy()

print('Copied List:', new_list)

Đầu ra

Copied List: ['cat', 0, 6.7]

Nếu bạn sửa đổi new_list trong ví dụ trên, my_list sẽ không được sửa đổi.


Danh sách bản sao bằng cách sử dụng =

Chúng tôi cũng có thể sử dụng toán tử

new_list = old_list.copy()
9 để sao chép danh sách. Ví dụ,

old_list = [1, 2, 3]
new_list = old_list

Howerver, có một vấn đề với việc sao chép danh sách theo cách này. Nếu bạn sửa đổi new_list, old_list cũng được sửa đổi. Đó là bởi vì danh sách mới đang tham khảo hoặc chỉ vào cùng một đối tượng Old_list.

old_list = [1, 2, 3]

# copy list using = new_list = old_list

# add an element to list new_list.append('a') print('New List:', new_list) print('Old List:', old_list)

Đầu ra

Old List: [1, 2, 3, 'a']
New List: [1, 2, 3, 'a']

Nếu bạn sửa đổi new_list trong ví dụ trên, my_list sẽ không được sửa đổi.

Danh sách bản sao bằng cách sử dụng = Python Shallow Copy Vs Deep Copy


Chúng tôi cũng có thể sử dụng toán tử new_list = old_list.copy() 9 để sao chép danh sách. Ví dụ,

# shallow copy using the slicing syntax

# mixed list
list = ['cat', 0, 6.7]

# copying a list using slicing new_list = list[:]

# Adding an element to the new list new_list.append('dog') # Printing new and old list print('Old List:', list) print('New List:', new_list)

Đầu ra

Old List: ['cat', 0, 6.7]
New List: ['cat', 0, 6.7, 'dog']


Sao chép một danh sách

Bạn không thể sao chép danh sách chỉ bằng cách nhập

new_list = list.copy()
01, bởi vì:
new_list = list.copy()
02 sẽ chỉ là một tham chiếu đến
new_list = list.copy()
03 và các thay đổi được thực hiện trong
new_list = list.copy()
03 cũng sẽ tự động được thực hiện trong
new_list = list.copy()
02.

Có nhiều cách để tạo một bản sao, một cách là sử dụng phương pháp danh sách tích hợp

new_list = list.copy()
06.

Thí dụ

Tạo một bản sao của một danh sách với phương thức

new_list = old_list.copy()
5:

Danh sách này = ["Apple", "Banana", "Cherry"] mylist = ThisList.Copy () in (Mylist)
mylist = thislist.copy()
print(mylist)

Hãy tự mình thử »

Một cách khác để tạo một bản sao là sử dụng phương thức tích hợp

new_list = list.copy()
08.

Thí dụ

Tạo một bản sao của một danh sách với phương thức

new_list = old_list.copy()
5:

Danh sách này = ["Apple", "Banana", "Cherry"] mylist = ThisList.Copy () in (Mylist)
mylist = list(thislist)
print(mylist)

Hãy tự mình thử »



new_list = list.copy()
10 không thực sự tạo danh sách thứ hai. Bài tập chỉ sao chép tham chiếu vào danh sách, không phải danh sách thực tế, vì vậy cả
new_list = list.copy()
11 và
new_list = list.copy()
12 đều đề cập đến cùng một danh sách sau khi chuyển nhượng.

Để thực sự sao chép danh sách, bạn có một số tùy chọn:

  • Bạn có thể sử dụng phương pháp

    new_list = list.copy()
    13 tích hợp (có sẵn kể từ Python 3.3):

    new_list = old_list.copy()
    
  • Bạn có thể cắt nó:

    new_list = list.copy()
    0

    Ý kiến ​​của Alex Martelli (ít nhất là vào năm 2007) về điều này là, đó là một cú pháp kỳ lạ và việc sử dụng nó không có ý nghĩa gì. ;) (Theo ý kiến ​​của ông, cái tiếp theo dễ đọc hơn).

  • Bạn có thể sử dụng hàm tạo

    new_list = list.copy()
    08 được tích hợp:

    new_list = list.copy()
    1
  • Bạn có thể sử dụng chung

    new_list = list.copy()
    15:

    new_list = list.copy()
    2

    Điều này chậm hơn một chút so với

    new_list = list.copy()
    08 vì nó phải tìm ra kiểu dữ liệu của
    new_list = list.copy()
    17 trước.

  • Nếu bạn cũng cần sao chép các yếu tố của danh sách, hãy sử dụng chung

    new_list = list.copy()
    18:

    new_list = list.copy()
    3

    Rõ ràng là phương pháp chậm nhất và cần thiết nhất, nhưng đôi khi không thể tránh khỏi. Điều này hoạt động đệ quy; Nó sẽ xử lý bất kỳ số lượng cấp của danh sách lồng nhau (hoặc các thùng chứa khác).

Example:

new_list = list.copy()
4

Result:

new_list = list.copy()
5

Hướng dẫn how do you copy a list in python? - làm thế nào để bạn sao chép một danh sách trong python?

wjandrea

25.2k8 Huy hiệu vàng53 Huy hiệu bạc74 Huy hiệu đồng8 gold badges53 silver badges74 bronze badges

Đã trả lời ngày 10 tháng 4 năm 2010 lúc 8:55Apr 10, 2010 at 8:55

Hướng dẫn how do you copy a list in python? - làm thế nào để bạn sao chép một danh sách trong python?

Felix Klingfelix KlingFelix Kling

774K172 Huy hiệu vàng1069 Huy hiệu bạc1116 Huy hiệu đồng172 gold badges1069 silver badges1116 bronze badges

4

Felix đã cung cấp một câu trả lời tuyệt vời, nhưng tôi nghĩ rằng tôi sẽ so sánh tốc độ các phương pháp khác nhau:

  1. 10,59 giây (105,9 Pha/ITN) -
    new_list = list.copy()
    19
  2. 10.16 giây (101.6 Pha/ITN) - Python thuần túy
    new_list = list.copy()
    20 Các lớp sao chép phương pháp với DeepCopy
  3. 1.488 giây (14,88 Pha/ITN) - Phương pháp Python
    new_list = list.copy()
    20 thuần túy không sao chép các lớp (chỉ Dicts/Danh sách/Tuples)
  4. 0,325 giây (3,25 Pha/ITN) -
    new_list = list.copy()
    22
  5. 0,217 giây (2.17 Pha/ITN) -
    new_list = list.copy()
    23 (một danh sách hiểu)
  6. 0.186 giây (1,86 Pha/ITN) -
    new_list = list.copy()
    24
  7. 0,075 giây (0,75 Pha/ITN) -
    new_list = list.copy()
    25
  8. 0,053 giây (0,53 Pha/ITN) -
    new_list = list.copy()
    26
  9. 0,039 giây (0,39 Pha/ITN) -
    new_list = list.copy()
    27 (cắt danh sách)

Vì vậy, nhanh nhất là danh sách cắt lát. Nhưng hãy lưu ý rằng

new_list = list.copy()
15,
new_list = list.copy()
29 và
new_list = list.copy()
30, không giống như
new_list = list.copy()
18 và phiên bản Python không sao chép bất kỳ danh sách, từ điển và trường hợp lớp nào trong danh sách, vì vậy nếu bản gốc thay đổi, họ cũng sẽ thay đổi trong danh sách sao chép và ngược lại.

(Đây là kịch bản nếu có ai quan tâm hoặc muốn nêu ra bất kỳ vấn đề nào :)

new_list = list.copy()
6

Hướng dẫn how do you copy a list in python? - làm thế nào để bạn sao chép một danh sách trong python?

Đã trả lời ngày 10 tháng 4 năm 2010 lúc 10:16Apr 10, 2010 at 10:16

Cryocryocryo

Huy hiệu vàng 14K431 Huy hiệu bạc35 Huy hiệu đồng4 gold badges31 silver badges35 bronze badges

7

Tôi đã được thông báo rằng Python 3.3+ thêm phương thức

new_list = list.copy()
13, sẽ nhanh như cắt lát:

new_list = list.copy()
7

Hướng dẫn how do you copy a list in python? - làm thế nào để bạn sao chép một danh sách trong python?

Đã trả lời ngày 23 tháng 7 năm 2013 lúc 12:32Jul 23, 2013 at 12:32

Anatoly Techtonikanatoly Techtonikanatoly techtonik

19.2k9 Huy hiệu vàng122 Huy hiệu bạc137 Huy hiệu đồng9 gold badges122 silver badges137 bronze badges

5

Các tùy chọn để nhân bản hoặc sao chép danh sách trong Python là gì?

Trong Python 3, một bản sao nông có thể được thực hiện bằng:

new_list = list.copy()
8

Trong Python 2 và 3, bạn có thể nhận được một bản sao nông với một lát hoàn toàn của bản gốc:

new_list = list.copy()
9

Giải trình

Có hai cách ngữ nghĩa để sao chép một danh sách. Một bản sao nông tạo ra một danh sách mới của cùng một đối tượng, một bản sao sâu tạo ra một danh sách mới chứa các đối tượng tương đương mới.

Bản sao danh sách nông

Một bản sao nông chỉ sao chép danh sách, đó là một thùng chứa các tài liệu tham khảo cho các đối tượng trong danh sách. Nếu các đối tượng chứa chính chúng bị thay đổi và một đối tượng được thay đổi, thay đổi sẽ được phản ánh trong cả hai danh sách.

Có nhiều cách khác nhau để làm điều này trong Python 2 và 3. Các cách Python 2 cũng sẽ hoạt động trong Python 3.

Python 2

Trong Python 2, cách thành ngữ để tạo một bản sao nông của danh sách là với một lát hoàn chỉnh của bản gốc:

new_list = list.copy()
9

Bạn cũng có thể hoàn thành điều tương tự bằng cách chuyển danh sách thông qua trình xây dựng danh sách,

# mixed list
my_list = ['cat', 0, 6.7]

# copying a list new_list = my_list.copy()

print('Copied List:', new_list)
1

Nhưng sử dụng hàm tạo kém hiệu quả:

# mixed list
my_list = ['cat', 0, 6.7]

# copying a list new_list = my_list.copy()

print('Copied List:', new_list)
2

Python 3

Trong Python 3, danh sách nhận phương thức

new_list = list.copy()
33:

new_list = list.copy()
8

Trong Python 3.5:

# mixed list
my_list = ['cat', 0, 6.7]

# copying a list new_list = my_list.copy()

print('Copied List:', new_list)
4

Tạo một con trỏ khác không tạo một bản sao

Sử dụng new_list = my_list sau đó sửa đổi new_list mỗi khi my_list thay đổi. Tại sao điều này?

new_list = list.copy()
12 chỉ là một cái tên chỉ vào danh sách thực tế trong bộ nhớ. Khi bạn nói
new_list = list.copy()
10 Bạn không tạo một bản sao, bạn chỉ cần thêm một tên khác chỉ vào danh sách ban đầu đó trong bộ nhớ. Chúng ta có thể có vấn đề tương tự khi chúng ta tạo các bản sao của danh sách.

# mixed list
my_list = ['cat', 0, 6.7]

# copying a list new_list = my_list.copy()

print('Copied List:', new_list)
5

Danh sách chỉ là một loạt các gợi ý cho các nội dung, vì vậy một bản sao nông chỉ sao chép các con trỏ, và vì vậy bạn có hai danh sách khác nhau, nhưng chúng có cùng nội dung. Để tạo các bản sao của nội dung, bạn cần một bản sao sâu.

Bản sao sâu

Để tạo một bản sao sâu của danh sách, trong Python 2 hoặc 3, hãy sử dụng

new_list = list.copy()
36 trong mô -đun
new_list = list.copy()
37:

# mixed list
my_list = ['cat', 0, 6.7]

# copying a list new_list = my_list.copy()

print('Copied List:', new_list)
6

Để chứng minh làm thế nào điều này cho phép chúng ta lập danh sách phụ mới:

# mixed list
my_list = ['cat', 0, 6.7]

# copying a list new_list = my_list.copy()

print('Copied List:', new_list)
7

Và vì vậy chúng tôi thấy rằng danh sách sao chép sâu là một danh sách hoàn toàn khác so với bản gốc. Bạn có thể cuộn chức năng của riêng mình - nhưng đừng. Bạn có thể tạo ra các lỗi mà bạn không có bằng cách sử dụng chức năng DeepCopy của thư viện tiêu chuẩn.

Không sử dụng new_list = list.copy()38

Bạn có thể thấy điều này được sử dụng như một cách để DeepCopy, nhưng đừng làm điều đó:

# mixed list
my_list = ['cat', 0, 6.7]

# copying a list new_list = my_list.copy()

print('Copied List:', new_list)
8
  1. Thật nguy hiểm, đặc biệt nếu bạn đang đánh giá một cái gì đó từ một nguồn mà bạn không tin tưởng.
  2. Nó không đáng tin cậy, nếu một SubLement bạn sao chép không có biểu diễn có thể được đánh giá để tái tạo một phần tử tương đương.
  3. Nó cũng ít hoạt động hơn.

Trong 64 bit Python 2.7:

# mixed list
my_list = ['cat', 0, 6.7]

# copying a list new_list = my_list.copy()

print('Copied List:', new_list)
9

trên 64 bit Python 3.5:

Copied List: ['cat', 0, 6.7]
0

Đã trả lời ngày 25 tháng 10 năm 2014 lúc 12:13Oct 25, 2014 at 12:13

Hướng dẫn how do you copy a list in python? - làm thế nào để bạn sao chép một danh sách trong python?

1

Hãy bắt đầu từ đầu và khám phá câu hỏi này.

Vì vậy, giả sử bạn có hai danh sách:

Copied List: ['cat', 0, 6.7]
1

Và chúng tôi phải sao chép cả hai danh sách, bây giờ bắt đầu từ danh sách đầu tiên:

Vì vậy, trước tiên hãy thử bằng cách đặt biến

new_list = list.copy()
37 vào danh sách ban đầu của chúng tôi,
new_list = list.copy()
40:

Copied List: ['cat', 0, 6.7]
2

Bây giờ nếu bạn đang nghĩ sao chép đã sao chép danh sách_1, thì bạn đã sai. Hàm

new_list = list.copy()
41 có thể hiển thị cho chúng ta nếu hai biến có thể trỏ đến cùng một đối tượng. Chúng ta hãy cố gắng này:

Copied List: ['cat', 0, 6.7]
3

Đầu ra là:

Copied List: ['cat', 0, 6.7]
4

Cả hai biến là một đối số chính xác. Bạn có ngạc nhiên không?

Vì vậy, như chúng ta đã biết, Python không lưu trữ bất cứ thứ gì trong một biến, các biến chỉ tham chiếu đến đối tượng và đối tượng lưu trữ giá trị. Ở đây đối tượng là một

new_list = list.copy()
42 nhưng chúng tôi đã tạo hai tham chiếu đến cùng một đối tượng bằng hai tên biến khác nhau. Điều này có nghĩa là cả hai biến đang chỉ vào cùng một đối tượng, chỉ với các tên khác nhau.

Khi bạn làm

new_list = list.copy()
43, nó thực sự đang làm:

Hướng dẫn how do you copy a list in python? - làm thế nào để bạn sao chép một danh sách trong python?

Ở đây trong hình ảnh list_1 và sao chép là hai tên biến, nhưng đối tượng giống nhau cho cả hai biến là

new_list = list.copy()
42.

Vì vậy, nếu bạn cố gắng sửa đổi danh sách đã sao chép thì nó cũng sẽ sửa đổi danh sách ban đầu vì danh sách chỉ là một ở đó, bạn sẽ sửa đổi danh sách đó bất kể bạn làm từ danh sách sao chép hoặc từ danh sách gốc:

Copied List: ['cat', 0, 6.7]
5

Output:

Copied List: ['cat', 0, 6.7]
6

Vì vậy, nó đã sửa đổi danh sách ban đầu:

Bây giờ chúng ta hãy chuyển sang một phương pháp pythonic để sao chép danh sách.

Copied List: ['cat', 0, 6.7]
7

Phương pháp này khắc phục vấn đề đầu tiên chúng tôi có:

Copied List: ['cat', 0, 6.7]
8

Vì vậy, vì chúng ta có thể thấy cả hai danh sách của chúng ta có ID khác nhau và điều đó có nghĩa là cả hai biến đang chỉ vào các đối tượng khác nhau. Vì vậy, những gì thực sự xảy ra ở đây là:

Hướng dẫn how do you copy a list in python? - làm thế nào để bạn sao chép một danh sách trong python?

Bây giờ chúng ta hãy cố gắng sửa đổi danh sách và hãy xem liệu chúng ta có còn phải đối mặt với vấn đề trước đó không:

Copied List: ['cat', 0, 6.7]
9

Đầu ra là:

old_list = [1, 2, 3]
new_list = old_list
0

Cả hai biến là một đối số chính xác. Bạn có ngạc nhiên không?

Vì vậy, như chúng ta đã biết, Python không lưu trữ bất cứ thứ gì trong một biến, các biến chỉ tham chiếu đến đối tượng và đối tượng lưu trữ giá trị. Ở đây đối tượng là một

new_list = list.copy()
42 nhưng chúng tôi đã tạo hai tham chiếu đến cùng một đối tượng bằng hai tên biến khác nhau. Điều này có nghĩa là cả hai biến đang chỉ vào cùng một đối tượng, chỉ với các tên khác nhau.

old_list = [1, 2, 3]
new_list = old_list
1

Khi bạn làm

new_list = list.copy()
43, nó thực sự đang làm:

old_list = [1, 2, 3]
new_list = old_list
2

Ở đây trong hình ảnh list_1 và sao chép là hai tên biến, nhưng đối tượng giống nhau cho cả hai biến là

new_list = list.copy()
42.

old_list = [1, 2, 3]
new_list = old_list
3

Vì vậy, nếu bạn cố gắng sửa đổi danh sách đã sao chép thì nó cũng sẽ sửa đổi danh sách ban đầu vì danh sách chỉ là một ở đó, bạn sẽ sửa đổi danh sách đó bất kể bạn làm từ danh sách sao chép hoặc từ danh sách gốc:

old_list = [1, 2, 3]
new_list = old_list
4

Vì vậy, nó đã sửa đổi danh sách ban đầu:

old_list = [1, 2, 3]
new_list = old_list
5

Bây giờ chúng ta hãy chuyển sang một phương pháp pythonic để sao chép danh sách.

Phương pháp này khắc phục vấn đề đầu tiên chúng tôi có:

old_list = [1, 2, 3]
new_list = old_list
1

Vì vậy, vì chúng ta có thể thấy cả hai danh sách của chúng ta có ID khác nhau và điều đó có nghĩa là cả hai biến đang chỉ vào các đối tượng khác nhau. Vì vậy, những gì thực sự xảy ra ở đây là:

old_list = [1, 2, 3]
new_list = old_list
7

Đầu ra là:

old_list = [1, 2, 3]
new_list = old_list
8

Cả hai biến là một đối số chính xác. Bạn có ngạc nhiên không?

Hướng dẫn how do you copy a list in python? - làm thế nào để bạn sao chép một danh sách trong python?

Vì vậy, như chúng ta đã biết, Python không lưu trữ bất cứ thứ gì trong một biến, các biến chỉ tham chiếu đến đối tượng và đối tượng lưu trữ giá trị. Ở đây đối tượng là một

new_list = list.copy()
42 nhưng chúng tôi đã tạo hai tham chiếu đến cùng một đối tượng bằng hai tên biến khác nhau. Điều này có nghĩa là cả hai biến đang chỉ vào cùng một đối tượng, chỉ với các tên khác nhau.

Khi bạn làm

new_list = list.copy()
43, nó thực sự đang làm:

old_list = [1, 2, 3]
new_list = old_list
9

Ở đây trong hình ảnh list_1 và sao chép là hai tên biến, nhưng đối tượng giống nhau cho cả hai biến là

new_list = list.copy()
42.

old_list = [1, 2, 3]

# copy list using = new_list = old_list

# add an element to list new_list.append('a') print('New List:', new_list) print('Old List:', old_list)
0

Vì vậy, nếu bạn cố gắng sửa đổi danh sách đã sao chép thì nó cũng sẽ sửa đổi danh sách ban đầu vì danh sách chỉ là một ở đó, bạn sẽ sửa đổi danh sách đó bất kể bạn làm từ danh sách sao chép hoặc từ danh sách gốc:

old_list = [1, 2, 3]

# copy list using = new_list = old_list

# add an element to list new_list.append('a') print('New List:', new_list) print('Old List:', old_list)
1

Đầu ra là:

old_list = [1, 2, 3]

# copy list using = new_list = old_list

# add an element to list new_list.append('a') print('New List:', new_list) print('Old List:', old_list)
2

Cả hai biến là một đối số chính xác. Bạn có ngạc nhiên không?

Vì vậy, như chúng ta đã biết, Python không lưu trữ bất cứ thứ gì trong một biến, các biến chỉ tham chiếu đến đối tượng và đối tượng lưu trữ giá trị. Ở đây đối tượng là một

new_list = list.copy()
42 nhưng chúng tôi đã tạo hai tham chiếu đến cùng một đối tượng bằng hai tên biến khác nhau. Điều này có nghĩa là cả hai biến đang chỉ vào cùng một đối tượng, chỉ với các tên khác nhau.

Hướng dẫn how do you copy a list in python? - làm thế nào để bạn sao chép một danh sách trong python?

Khi bạn làm

new_list = list.copy()
43, nó thực sự đang làm:

Ở đây trong hình ảnh list_1 và sao chép là hai tên biến, nhưng đối tượng giống nhau cho cả hai biến là

new_list = list.copy()
42.

old_list = [1, 2, 3]

# copy list using = new_list = old_list

# add an element to list new_list.append('a') print('New List:', new_list) print('Old List:', old_list)
3

Vì vậy, nếu bạn cố gắng sửa đổi danh sách đã sao chép thì nó cũng sẽ sửa đổi danh sách ban đầu vì danh sách chỉ là một ở đó, bạn sẽ sửa đổi danh sách đó bất kể bạn làm từ danh sách sao chép hoặc từ danh sách gốc:

old_list = [1, 2, 3]

# copy list using = new_list = old_list

# add an element to list new_list.append('a') print('New List:', new_list) print('Old List:', old_list)
4

Vì vậy, nó đã sửa đổi danh sách ban đầu:

Hướng dẫn how do you copy a list in python? - làm thế nào để bạn sao chép một danh sách trong python?

Bây giờ chúng ta hãy chuyển sang một phương pháp pythonic để sao chép danh sách.Nov 13, 2017 at 7:04

Hướng dẫn how do you copy a list in python? - làm thế nào để bạn sao chép một danh sách trong python?

Phương pháp này khắc phục vấn đề đầu tiên chúng tôi có:Aaditya Ura

Vì vậy, vì chúng ta có thể thấy cả hai danh sách của chúng ta có ID khác nhau và điều đó có nghĩa là cả hai biến đang chỉ vào các đối tượng khác nhau. Vì vậy, những gì thực sự xảy ra ở đây là:7 gold badges44 silver badges79 bronze badges

0

Bây giờ chúng ta hãy cố gắng sửa đổi danh sách và hãy xem liệu chúng ta có còn phải đối mặt với vấn đề trước đó không:

Như bạn có thể thấy, nó chỉ sửa đổi danh sách sao chép. Điều đó có nghĩa là nó đã làm việc.

Mỗi phần tử của một danh sách hoạt động giống như một tên, trong đó mỗi phần tử liên kết không bị loại trừ với một đối tượng. Một bản sao nông tạo ra một danh sách mới có các yếu tố liên kết với cùng một đối tượng như trước đây.

old_list = [1, 2, 3]

# copy list using = new_list = old_list

# add an element to list new_list.append('a') print('New List:', new_list) print('Old List:', old_list)
5

Để đưa danh sách của bạn sao chép thêm một bước nữa, hãy sao chép từng đối tượng mà danh sách của bạn đề cập và liên kết các bản sao phần tử đó vào danh sách mới.

old_list = [1, 2, 3]

# copy list using = new_list = old_list

# add an element to list new_list.append('a') print('New List:', new_list) print('Old List:', old_list)
6

Đây chưa phải là một bản sao sâu, bởi vì mỗi yếu tố của một danh sách có thể đề cập đến các đối tượng khác, giống như danh sách bị ràng buộc với các yếu tố của nó. Để sao chép đệ quy mọi yếu tố trong danh sách, và sau đó các đối tượng khác được đề cập bởi từng phần tử, v.v.: Thực hiện một bản sao sâu.

old_list = [1, 2, 3]

# copy list using = new_list = old_list

# add an element to list new_list.append('a') print('New List:', new_list) print('Old List:', old_list)
7

Xem tài liệu để biết thêm thông tin về các trường hợp góc trong sao chép.

Đã trả lời ngày 23 tháng 11 năm 2014 lúc 16:45Nov 23, 2014 at 16:45

kiểm trajack

2.0141 Huy hiệu vàng17 Huy hiệu bạc17 Huy hiệu đồng1 gold badge17 silver badges17 bronze badges

0

Sử dụng

new_list = list.copy()
56

old_list = [1, 2, 3]

# copy list using = new_list = old_list

# add an element to list new_list.append('a') print('New List:', new_list) print('Old List:', old_list)
8

Đã trả lời ngày 10 tháng 4 năm 2010 lúc 8:53Apr 10, 2010 at 8:53

Paul Tarjanpaul TarjanPaul Tarjan

47.7K59 Huy hiệu vàng166 Huy hiệu bạc213 Huy hiệu Đồng59 gold badges166 silver badges213 bronze badges

Thời gian Python 3.6

Dưới đây là kết quả thời gian sử dụng Python 3.6.8. Hãy ghi nhớ những thời điểm này là liên quan đến nhau, không tuyệt đối.

Tôi chỉ mắc các bản sao nông, và cũng đã thêm một số phương pháp mới không thể xảy ra trong Python & nbsp; 2, chẳng hạn như

new_list = list.copy()
13 (Python & NBSP; 3 Slice tương đương) và hai hình thức danh sách giải nén (
new_list = list.copy()
58 và
new_list = list.copy()
59):

old_list = [1, 2, 3]

# copy list using = new_list = old_list

# add an element to list new_list.append('a') print('New List:', new_list) print('Old List:', old_list)
9

Chúng ta có thể thấy người chiến thắng Python 2 vẫn hoạt động tốt, nhưng không vượt qua Python 3

new_list = list.copy()
13, đặc biệt là xem xét khả năng đọc vượt trội của người sau.

Ngựa tối là phương pháp giải nén và đóng gói lại (

new_list = list.copy()
61), nhanh hơn ~ 25% so với cắt thô và nhanh hơn gấp đôi so với phương pháp giải nén khác (
new_list = list.copy()
62).

new_list = list.copy()
63 cũng làm tốt một cách đáng ngạc nhiên.

Lưu ý rằng các phương pháp này không đưa ra kết quả tương đương cho bất kỳ đầu vào nào ngoài danh sách. Tất cả chúng đều hoạt động cho các đối tượng có thể cắt xén, một số ít hoạt động cho bất kỳ điều gì có thể, nhưng chỉ

new_list = list.copy()
15 hoạt động cho các đối tượng Python tổng quát hơn. They all work for sliceable objects, a few work for any iterable, but only
new_list = list.copy()
15 works for more general Python objects.


Dưới đây là mã kiểm tra cho các bên quan tâm (mẫu từ đây):

Old List: [1, 2, 3, 'a']
New List: [1, 2, 3, 'a']
0

Hướng dẫn how do you copy a list in python? - làm thế nào để bạn sao chép một danh sách trong python?

Đã trả lời ngày 5 tháng 4 năm 2017 lúc 1:01Apr 5, 2017 at 1:01

Hướng dẫn how do you copy a list in python? - làm thế nào để bạn sao chép một danh sách trong python?

Bờ sôngRiver

8.26514 Huy hiệu vàng54 Huy hiệu bạc65 Huy hiệu Đồng14 gold badges54 silver badges65 bronze badges

6

Thành ngữ của Python để làm điều này là

new_list = list.copy()
65

Đã trả lời ngày 10 tháng 4 năm 2010 lúc 8:53Apr 10, 2010 at 8:53

Paul Tarjanpaul Tarjanerisco

47.7K59 Huy hiệu vàng166 Huy hiệu bạc213 Huy hiệu Đồng2 gold badges38 silver badges44 bronze badges

Thời gian Python 3.6great answers, which work when you have a single dimension (leveled) list, however of the methods mentioned so far, only

new_list = list.copy()
18 works to clone/copy a list and not have it point to the nested
new_list = list.copy()
42 objects when you are working with multidimensional, nested lists (list of lists). While Felix Kling refers to it in his answer, there is a little bit more to the issue and possibly a workaround using built-ins that might prove a faster alternative to
new_list = list.copy()
36.

Dưới đây là kết quả thời gian sử dụng Python 3.6.8. Hãy ghi nhớ những thời điểm này là liên quan đến nhau, không tuyệt đối.

Tôi chỉ mắc các bản sao nông, và cũng đã thêm một số phương pháp mới không thể xảy ra trong Python & nbsp; 2, chẳng hạn như new_list = list.copy()13 (Python & NBSP; 3 Slice tương đương) và hai hình thức danh sách giải nén (new_list = list.copy()58 và new_list = list.copy()59):

Chúng ta có thể thấy người chiến thắng Python 2 vẫn hoạt động tốt, nhưng không vượt qua Python 3

new_list = list.copy()
13, đặc biệt là xem xét khả năng đọc vượt trội của người sau.using
new_list = list.copy()
76 is not only a bad idea, it is also much slower than
new_list = list.copy()
18.

Ngựa tối là phương pháp giải nén và đóng gói lại (

new_list = list.copy()
61), nhanh hơn ~ 25% so với cắt thô và nhanh hơn gấp đôi so với phương pháp giải nén khác (
new_list = list.copy()
62).

new_list = list.copy()
63 cũng làm tốt một cách đáng ngạc nhiên.

Lưu ý rằng các phương pháp này không đưa ra kết quả tương đương cho bất kỳ đầu vào nào ngoài danh sách. Tất cả chúng đều hoạt động cho các đối tượng có thể cắt xén, một số ít hoạt động cho bất kỳ điều gì có thể, nhưng chỉ

new_list = list.copy()
15 hoạt động cho các đối tượng Python tổng quát hơn.are significant performance issues using the
new_list = list.copy()
37 module and
new_list = list.copy()
81 for multidimensional lists.

Dưới đây là mã kiểm tra cho các bên quan tâm (mẫu từ đây):Jul 10, 2015 at 3:51

Hướng dẫn how do you copy a list in python? - làm thế nào để bạn sao chép một danh sách trong python?

Đã trả lời ngày 5 tháng 4 năm 2017 lúc 1:01AMR

Bờ sông1 gold badge6 silver badges16 bronze badges

3

8.26514 Huy hiệu vàng54 Huy hiệu bạc65 Huy hiệu Đồng

Thành ngữ của Python để làm điều này là

new_list = list.copy()
65

Old List: [1, 2, 3, 'a']
New List: [1, 2, 3, 'a']
1

Eriscoerisco

Huy hiệu vàng 14K238 Huy hiệu bạc44 Huy hiệu đồng

Old List: [1, 2, 3, 'a']
New List: [1, 2, 3, 'a']
2

Tất cả những người đóng góp khác đã đưa ra câu trả lời tuyệt vời, hoạt động khi bạn có một danh sách duy nhất (san bằng), tuy nhiên các phương pháp được đề cập cho đến nay, chỉ

new_list = list.copy()
18 hoạt động để sao chép/sao chép một danh sách và không chỉ ra các đối tượng
new_list = list.copy()
42 được lồng vào nhau khi Bạn đang làm việc với các danh sách đa chiều, lồng nhau (danh sách danh sách). Mặc dù Felix Kling đề cập đến nó trong câu trả lời của mình, có thêm một chút nữa cho vấn đề này và có thể là một cách giải quyết bằng cách sử dụng các bản dựng có thể chứng minh một sự thay thế nhanh hơn cho
new_list = list.copy()
36.Feb 26, 2018 at 2:33

Trong khi

new_list = list.copy()
69,
new_list = list.copy()
70 và đối với PY3K
new_list = list.copy()
71 làm việc cho các danh sách một cấp độ, chúng trở lại chỉ vào các đối tượng
new_list = list.copy()
42 được lồng trong
new_list = list.copy()
17 và
new_list = list.copy()
11, và thay đổi thành một trong các đối tượng
new_list = list.copy()
42.SCB

Chỉnh sửa: Thông tin mới được đưa ra ánh sáng1 gold badge34 silver badges41 bronze badges

2

Old List: [1, 2, 3, 'a']
New List: [1, 2, 3, 'a']
3

new_list = list.copy()
10

Như đã được chỉ ra bởi cả Aaron Hall và PM 2ring sử dụng

new_list = list.copy()
76 không chỉ là một ý tưởng tồi, nó còn chậm hơn nhiều so với
new_list = list.copy()
18.

Bây giờ nếu bạn gán

new_list = list.copy()
85, bạn chỉ cần sao chép từng đối tượng của my_list cho new_list. Điều này được gọi là một bản sao sâu.

Những cách khác bạn có thể làm điều này là:

  • new_list = list.copy()
    1
  • new_list = list.copy()
    3

Cherrydt

23.4K3 Huy hiệu vàng43 Huy hiệu bạc69 Huy hiệu Đồng3 gold badges43 silver badges69 bronze badges

Đã trả lời ngày 26 tháng 6 năm 2017 lúc 21:03Jun 26, 2017 at 21:03

Ravi Shankarravi ShankarRavi Shankar

1.6934 Huy hiệu vàng13 Huy hiệu bạc15 Huy hiệu Đồng4 gold badges13 silver badges15 bronze badges

1

Một cách tiếp cận rất đơn giản độc lập với phiên bản Python đã bị thiếu trong các câu trả lời đã được đưa ra mà bạn có thể sử dụng hầu hết thời gian (ít nhất là tôi làm):

Old List: [1, 2, 3, 'a']
New List: [1, 2, 3, 'a']
6

Tuy nhiên, nếu my_list chứa các thùng chứa khác (ví dụ: danh sách lồng nhau), bạn phải sử dụng DeepCopy như những người khác được đề xuất trong các câu trả lời ở trên từ thư viện sao chép. Ví dụ:

Old List: [1, 2, 3, 'a']
New List: [1, 2, 3, 'a']
7

.Bonus: nếu bạn không muốn sao chép các thành phần sử dụng (còn gọi là bản sao nông):Bonus: If you don't want to copy elements use (AKA shallow copy):

Old List: [1, 2, 3, 'a']
New List: [1, 2, 3, 'a']
3

Hãy hiểu sự khác biệt giữa giải pháp #1 và giải pháp #2

Old List: [1, 2, 3, 'a']
New List: [1, 2, 3, 'a']
9

Như bạn có thể thấy, Giải pháp số 1 đã hoạt động hoàn hảo khi chúng tôi không sử dụng danh sách lồng nhau. Hãy kiểm tra điều gì sẽ xảy ra khi chúng tôi áp dụng giải pháp số 1 cho danh sách lồng nhau.

# shallow copy using the slicing syntax

# mixed list
list = ['cat', 0, 6.7]

# copying a list using slicing new_list = list[:]

# Adding an element to the new list new_list.append('dog') # Printing new and old list print('Old List:', list) print('New List:', new_list)
0

Hướng dẫn how do you copy a list in python? - làm thế nào để bạn sao chép một danh sách trong python?

Đã trả lời ngày 1 tháng 11 năm 2017 lúc 8:08Nov 1, 2017 at 8:08

Hướng dẫn how do you copy a list in python? - làm thế nào để bạn sao chép một danh sách trong python?

Jainashishjainashishjainashish

4.1425 Huy hiệu vàng36 Huy hiệu bạc48 Huy hiệu đồng5 gold badges36 silver badges48 bronze badges

Tôi muốn đăng một cái gì đó hơi khác so với một số câu trả lời khác. Mặc dù điều này rất có thể không phải là tùy chọn dễ hiểu nhất hoặc nhanh nhất, nhưng nó cung cấp một chút chế độ xem bên trong về cách sao chép sâu hoạt động, cũng như là một lựa chọn thay thế khác để sao chép sâu. Không thực sự quan trọng nếu chức năng của tôi có lỗi, vì điểm này là chỉ ra cách sao chép các đối tượng như câu trả lời câu hỏi, nhưng cũng sử dụng điều này như một điểm để giải thích cách thức hoạt động của DeepCopy ở cốt lõi của nó.

Cốt lõi của bất kỳ chức năng sao chép sâu nào là cách tạo một bản sao nông. Làm sao? Giản dị. Bất kỳ chức năng sao chép sâu nào chỉ nhân đôi các thùng chứa của các đối tượng bất biến. Khi bạn DeepCopy một danh sách lồng nhau, bạn chỉ sao chép các danh sách bên ngoài, không phải là các đối tượng có thể thay đổi bên trong danh sách. Bạn chỉ đang nhân đôi các container. Các tác phẩm tương tự cho các lớp học, quá. Khi bạn DeepCopy một lớp, bạn DeepCopy tất cả các thuộc tính có thể thay đổi của nó. Rồi sao? Làm thế nào bạn chỉ phải sao chép các container, như danh sách, dicts, bộ dữ liệu, iters, lớp học và trường hợp lớp học?

Nó đơn giản. Một đối tượng có thể thay đổi thực sự không thể được nhân đôi. Nó không bao giờ có thể được thay đổi, vì vậy nó chỉ là một giá trị duy nhất. Điều đó có nghĩa là bạn không bao giờ phải nhân đôi chuỗi, số, bools hoặc bất kỳ thứ nào trong số đó. Nhưng làm thế nào bạn sẽ nhân đôi các container? Giản dị. Bạn chỉ cần khởi tạo một thùng chứa mới với tất cả các giá trị. Deepcopy dựa vào đệ quy. Nó nhân đôi tất cả các container, ngay cả những container có các thùng chứa bên trong chúng, cho đến khi không còn container. Một container là một đối tượng bất biến.

Một khi bạn biết điều đó, việc nhân đôi hoàn toàn một đối tượng mà không có bất kỳ tài liệu tham khảo nào là khá dễ dàng. Đây là một chức năng cho các loại dữ liệu cơ bản sâu sắc (sẽ không hoạt động cho các lớp tùy chỉnh nhưng bạn luôn có thể thêm điều đó)

# shallow copy using the slicing syntax

# mixed list
list = ['cat', 0, 6.7]

# copying a list using slicing new_list = list[:]

# Adding an element to the new list new_list.append('dog') # Printing new and old list print('Old List:', list) print('New List:', new_list)
1

DeepCopy tích hợp của Python dựa trên ví dụ đó. Sự khác biệt duy nhất là nó hỗ trợ các loại khác và cũng hỗ trợ các lớp người dùng bằng cách sao chép các thuộc tính thành một lớp trùng lặp mới và cũng chặn Recursion vô hạn với tham chiếu đến một đối tượng mà nó đã thấy bằng danh sách ghi nhớ hoặc từ điển. Và đó thực sự là nó để tạo ra các bản sao sâu. Tại cốt lõi của nó, tạo ra một bản sao sâu chỉ là tạo ra các bản sao nông. Tôi hy vọng câu trả lời này sẽ thêm một cái gì đó vào câu hỏi.

Ví dụ

Nói rằng bạn có danh sách này:

new_list = list.copy()
86. Các số bất biến không thể được nhân đôi, nhưng lớp khác có thể. Bạn có thể sao chép nó bằng cách sử dụng danh sách hiểu:
new_list = list.copy()
87

Bây giờ, hãy tưởng tượng bạn có danh sách này:

new_list = list.copy()
88. Lần này, bạn muốn tạo một hàm, sử dụng đệ quy để sao chép sâu tất cả các lớp của danh sách. Thay vì sự hiểu biết danh sách trước đó:

# shallow copy using the slicing syntax

# mixed list
list = ['cat', 0, 6.7]

# copying a list using slicing new_list = list[:]

# Adding an element to the new list new_list.append('dog') # Printing new and old list print('Old List:', list) print('New List:', new_list)
2

Nó sử dụng một cái mới cho danh sách:

# shallow copy using the slicing syntax

# mixed list
list = ['cat', 0, 6.7]

# copying a list using slicing new_list = list[:]

# Adding an element to the new list new_list.append('dog') # Printing new and old list print('Old List:', list) print('New List:', new_list)
3

Và DeepCopy_List trông như thế này:deepcopy_list looks like this:

# shallow copy using the slicing syntax

# mixed list
list = ['cat', 0, 6.7]

# copying a list using slicing new_list = list[:]

# Adding an element to the new list new_list.append('dog') # Printing new and old list print('Old List:', list) print('New List:', new_list)
4

Sau đó, bây giờ bạn có một chức năng có thể làm sâu sắc bất kỳ danh sách các STRS, BOOLS, FLOAST, INT và thậm chí danh sách đến vô số lớp sử dụng đệ quy. Và ở đó bạn có nó, DeepCopying.strs, bools, floast, ints and even lists to infinitely many layers using recursion. And there you have it, deepcopying.

TLDR: DeepCopy sử dụng đệ quy để nhân đôi các đối tượng và chỉ đơn thuần trả về các đối tượng bất biến giống như trước đây, vì các đối tượng bất biến không thể được nhân đôi. Tuy nhiên, nó sâu sắc các lớp bên trong nhất của các đối tượng có thể thay đổi cho đến khi nó đạt đến lớp đột biến ngoài cùng của một đối tượng.: Deepcopy uses recursion to duplicate objects, and merely returns the same immutable objects as before, as immutable objects cannot be duplicated. However, it deepcopies the most inner layers of mutable objects until it reaches the outermost mutable layer of an object.

Đã trả lời ngày 8 tháng 9 năm 2019 lúc 2:25Sep 8, 2019 at 2:25

CormancormanCorman

6799 Huy hiệu bạc15 Huy hiệu Đồng9 silver badges15 bronze badges

Lưu ý rằng có một số trường hợp nếu bạn đã xác định lớp tùy chỉnh của riêng mình và bạn muốn giữ các thuộc tính thì bạn nên sử dụng

new_list = list.copy()
15 hoặc
new_list = list.copy()
18 thay vì các lựa chọn thay thế, ví dụ như trong Python 3:

# shallow copy using the slicing syntax

# mixed list
list = ['cat', 0, 6.7]

# copying a list using slicing new_list = list[:]

# Adding an element to the new list new_list.append('dog') # Printing new and old list print('Old List:', list) print('New List:', new_list)
5

Outputs:

# shallow copy using the slicing syntax

# mixed list
list = ['cat', 0, 6.7]

# copying a list using slicing new_list = list[:]

# Adding an element to the new list new_list.append('dog') # Printing new and old list print('Old List:', list) print('New List:', new_list)
6

Đã trả lời ngày 16 tháng 5 năm 2018 lúc 14:31May 16, 2018 at 14:31

Chris_RandsChris_RandsChris_Rands

36.7K13 Huy hiệu vàng79 Huy hiệu bạc112 Huy hiệu đồng13 gold badges79 silver badges112 bronze badges

Hãy nhớ rằng trong Python khi bạn làm:

# shallow copy using the slicing syntax

# mixed list
list = ['cat', 0, 6.7]

# copying a list using slicing new_list = list[:]

# Adding an element to the new list new_list.append('dog') # Printing new and old list print('Old List:', list) print('New List:', new_list)
7

List2 không lưu trữ danh sách thực tế, mà là một tham chiếu đến List1. Vì vậy, khi bạn làm bất cứ điều gì với List1, List2 cũng thay đổi. Sử dụng mô -đun sao chép (không phải mặc định, tải xuống trên PIP) để tạo một bản gốc của danh sách (________ 115 cho danh sách đơn giản,

new_list = list.copy()
18 cho các bản lồng nhau). Điều này làm cho một bản sao không thay đổi với danh sách đầu tiên.

Đã trả lời ngày 22 tháng 2 năm 2020 lúc 12:44Feb 22, 2020 at 12:44

Hướng dẫn how do you copy a list in python? - làm thế nào để bạn sao chép một danh sách trong python?

Tiến sĩ Hippodr. Con hà mãDr. Hippo

612 Huy hiệu bạc5 Huy hiệu Đồng2 silver badges5 bronze badges

Một quan điểm thực tế nhỏ để xem xét bộ nhớ thông qua ID và GC.

# shallow copy using the slicing syntax

# mixed list
list = ['cat', 0, 6.7]

# copying a list using slicing new_list = list[:]

# Adding an element to the new list new_list.append('dog') # Printing new and old list print('Old List:', list) print('New List:', new_list)
8

Đã trả lời ngày 23 tháng 11 năm 2019 lúc 19:01Nov 23, 2019 at 19:01

Hướng dẫn how do you copy a list in python? - làm thế nào để bạn sao chép một danh sách trong python?

B.Mr.W.B.Mr.W.B.Mr.W.

18.1K33 Huy hiệu vàng111 Huy hiệu bạc167 Huy hiệu đồng33 gold badges111 silver badges167 bronze badges

Có một cách khác để sao chép một danh sách không được liệt kê cho đến bây giờ: thêm một danh sách trống:

new_list = list.copy()
93.

Tôi đã thử nghiệm nó với Python 3.8:

# shallow copy using the slicing syntax

# mixed list
list = ['cat', 0, 6.7]

# copying a list using slicing new_list = list[:]

# Adding an element to the new list new_list.append('dog') # Printing new and old list print('Old List:', list) print('New List:', new_list)
9

Nó không phải là câu trả lời tốt nhất, nhưng nó hoạt động.

Hướng dẫn how do you copy a list in python? - làm thế nào để bạn sao chép một danh sách trong python?

Đã trả lời ngày 3 tháng 7 năm 2020 lúc 13:15Jul 3, 2020 at 13:15

1

Tùy chọn DeepCopy là phương pháp duy nhất phù hợp với tôi:

Old List: ['cat', 0, 6.7]
New List: ['cat', 0, 6.7, 'dog']
0

dẫn đến đầu ra của:

Old List: ['cat', 0, 6.7]
New List: ['cat', 0, 6.7, 'dog']
1

Đã trả lời ngày 11 tháng 4 năm 2020 lúc 11:19Apr 11, 2020 at 11:19

shahar_mshahar_mshahar_m

3.2955 Huy hiệu vàng40 Huy hiệu bạc59 Huy hiệu Đồng5 gold badges40 silver badges59 bronze badges

1

Điều này là do, dòng

new_list = list.copy()
10 gán một tham chiếu mới cho biến
new_list = list.copy()
12 là
new_list = list.copy()
11 Điều này tương tự như mã
new_list = list.copy()
97 được đưa ra dưới đây,

Old List: ['cat', 0, 6.7]
New List: ['cat', 0, 6.7, 'dog']
2

Bạn nên sử dụng mô -đun sao chép để tạo danh sách mới bằng cách

Old List: ['cat', 0, 6.7]
New List: ['cat', 0, 6.7, 'dog']
3

Đã trả lời ngày 4 tháng 6 năm 2020 lúc 10:40Jun 4, 2020 at 10:40

Hướng dẫn how do you copy a list in python? - làm thế nào để bạn sao chép một danh sách trong python?

Roshin Raphelroshin RaphelRoshin Raphel

2.4993 huy hiệu vàng19 Huy hiệu bạc36 Huy hiệu đồng3 gold badges19 silver badges36 bronze badges

Phương pháp sử dụng phụ thuộc vào nội dung của danh sách được sao chép. Nếu danh sách chứa

new_list = list.copy()
98 lồng nhau hơn DeepCopy là phương pháp duy nhất hoạt động, nếu không thì hầu hết các phương thức được liệt kê trong câu trả lời (lát, vòng lặp [cho], sao chép, mở rộng, kết hợp hoặc giải nén) sẽ hoạt động và thực hiện trong thời gian tương tự (ngoại trừ cho Loop và DeepCopy, đã tạo hình cho điều tồi tệ nhất).

Script

Old List: ['cat', 0, 6.7]
New List: ['cat', 0, 6.7, 'dog']
4

Kết quả

Old List: ['cat', 0, 6.7]
New List: ['cat', 0, 6.7, 'dog']
5

Đã trả lời ngày 30 tháng 1 năm 2021 lúc 20:17Jan 30, 2021 at 20:17

Hướng dẫn how do you copy a list in python? - làm thế nào để bạn sao chép một danh sách trong python?

fjemifjemifjemi

Phù hiệu bằng đồng 2133 bronze badges

Challenge Frame: Bạn có thực sự cần sao chép, cho ứng dụng của mình không?

Tôi thường thấy mã cố gắng sửa đổi một bản sao của danh sách theo một số kiểu lặp. Để xây dựng một ví dụ tầm thường, giả sử chúng ta có mã không hoạt động (vì

new_list = list.copy()
99 không nên được sửa đổi) như:

Old List: ['cat', 0, 6.7]
New List: ['cat', 0, 6.7, 'dog']
6

Đương nhiên mọi người sẽ hỏi làm thế nào để làm cho

# mixed list
my_list = ['cat', 0, 6.7]

# copying a list new_list = my_list.copy()

print('Copied List:', new_list)
00 trở thành bản sao của
new_list = list.copy()
99, thay vì một tên cho cùng một danh sách, để vòng lặp
# mixed list
my_list = ['cat', 0, 6.7]

# copying a list new_list = my_list.copy()

print('Copied List:', new_list)
02 sẽ làm đúng.

Nhưng đây là cách tiếp cận sai. Về mặt chức năng, những gì chúng tôi thực sự muốn làm là lập một danh sách mới dựa trên bản gốc.new list that is based on the original.

Chúng ta không cần phải tạo một bản sao trước để làm điều đó, và chúng ta thường không nên.

Khi chúng ta cần áp dụng logic cho từng phần tử

Công cụ tự nhiên cho điều này là một danh sách hiểu. Bằng cách này, chúng tôi viết logic cho chúng tôi biết làm thế nào các yếu tố trong kết quả mong muốn, liên quan đến các yếu tố ban đầu. Nó đơn giản, thanh lịch và biểu cảm; Và chúng tôi tránh sự cần thiết của cách giải quyết để sửa đổi bản sao

# mixed list
my_list = ['cat', 0, 6.7]

# copying a list new_list = my_list.copy()

print('Copied List:', new_list)
00 trong vòng lặp
# mixed list
my_list = ['cat', 0, 6.7]

# copying a list new_list = my_list.copy()

print('Copied List:', new_list)
02 (vì việc gán cho biến lặp không ảnh hưởng đến danh sách - vì lý do tương tự mà chúng tôi muốn bản sao ngay từ đầu!).

Đối với ví dụ trên, có vẻ như:

Old List: ['cat', 0, 6.7]
New List: ['cat', 0, 6.7, 'dog']
7

Danh sách toàn diện khá mạnh mẽ; Chúng ta cũng có thể sử dụng chúng để lọc ra các phần tử theo quy tắc với mệnh đề

# mixed list
my_list = ['cat', 0, 6.7]

# copying a list new_list = my_list.copy()

print('Copied List:', new_list)
05 và chúng ta có thể chuỗi các điều khoản
# mixed list
my_list = ['cat', 0, 6.7]

# copying a list new_list = my_list.copy()

print('Copied List:', new_list)
02 và
# mixed list
my_list = ['cat', 0, 6.7]

# copying a list new_list = my_list.copy()

print('Copied List:', new_list)
05 (nó hoạt động giống như mã bắt buộc tương ứng, với cùng một điều khoản theo cùng một thứ tự; chỉ có giá trị cuối cùng sẽ kết thúc Lên trong danh sách kết quả, được di chuyển ra phía trước thay vì ở phần "trong cùng"). Nếu kế hoạch được lặp lại trong bản gốc trong khi sửa đổi bản sao để tránh các vấn đề, thì nói chung có một cách dễ chịu hơn nhiều để làm điều đó với một danh sách lọc hiểu.

Khi chúng ta cần từ chối hoặc chèn các yếu tố cụ thể theo vị trí

Giả sử thay vào đó chúng ta có một cái gì đó giống như

Old List: ['cat', 0, 6.7]
New List: ['cat', 0, 6.7, 'dog']
8

Thay vì tạo

# mixed list
my_list = ['cat', 0, 6.7]

# copying a list new_list = my_list.copy()

print('Copied List:', new_list)
00 một bản sao riêng trước để xóa phần chúng tôi không muốn, chúng tôi có thể xây dựng một danh sách bằng cách kết hợp các phần mà chúng tôi muốn. Do đó:

Old List: ['cat', 0, 6.7]
New List: ['cat', 0, 6.7, 'dog']
9

Xử lý chèn, thay thế, vv bằng cách cắt được để lại như một bài tập. Chỉ cần đưa ra lý do mà bạn muốn kết quả là kết quả. Một trường hợp đặc biệt của điều này là tạo một bản sao đảo ngược - giả sử chúng ta cần một danh sách mới (thay vì chỉ lặp ngược lại), chúng ta có thể trực tiếp tạo nó bằng cách cắt, thay vì nhân bản và sau đó sử dụng

# mixed list
my_list = ['cat', 0, 6.7]

# copying a list new_list = my_list.copy()

print('Copied List:', new_list)
09.


Các cách tiếp cận này - như sự hiểu biết danh sách - cũng có lợi thế là chúng tạo ra kết quả mong muốn như một biểu thức, thay vì sửa đổi thủ tục một đối tượng hiện có tại chỗ (và trả về

# mixed list
my_list = ['cat', 0, 6.7]

# copying a list new_list = my_list.copy()

print('Copied List:', new_list)
10). Điều này thuận tiện hơn để viết mã theo phong cách "thông thạo".

Đã trả lời ngày 23 tháng 9 lúc 17:19Sep 23 at 17:19

Karl Knechtelkarl KnechtelKarl Knechtel

59.4K10 Huy hiệu vàng86 Huy hiệu bạc132 Huy hiệu đồng10 gold badges86 silver badges132 bronze badges

Giải thích ngắn và đơn giản về từng chế độ bản sao:

Một bản sao nông xây dựng một đối tượng hợp chất mới và sau đó (trong phạm vi có thể) chèn các tham chiếu vào nó cho các đối tượng được tìm thấy trong bản gốc - tạo một bản sao nông:shallow copy constructs a new compound object and then (to the extent possible) inserts references into it to the objects found in the original - creating a shallow copy:

new_list = old_list.copy()
0

Một bản sao sâu xây dựng một đối tượng hợp chất mới và sau đó, đệ quy, chèn các bản sao vào nó của các đối tượng được tìm thấy trong bản gốc - tạo một bản sao sâu:deep copy constructs a new compound object and then, recursively, inserts copies into it of the objects found in the original - creating a deep copy:

new_list = old_list.copy()
1

new_list = list.copy()
08 hoạt động tốt cho bản sao sâu của danh sách đơn giản, như:

new_list = old_list.copy()
2

Nhưng, đối với các danh sách phức tạp như ...

new_list = old_list.copy()
3

... Sử dụng

# mixed list
my_list = ['cat', 0, 6.7]

# copying a list new_list = my_list.copy()

print('Copied List:', new_list)
12:

new_list = old_list.copy()
4

Đã trả lời ngày 15 tháng 10 lúc 1:15Oct 15 at 1:15

Hướng dẫn how do you copy a list in python? - làm thế nào để bạn sao chép một danh sách trong python?

Fellipe Sanchesfellipe SanchesFellipe Sanches

6.4064 Huy hiệu vàng29 Huy hiệu bạc 30 Huy hiệu Đồng4 gold badges29 silver badges30 bronze badges

2

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

Bản sao danh sách Python ()..
Sao chép () Cú pháp. Cú pháp của phương thức Copy () là: new_list = list.copy ().
Sao chép () tham số. Phương thức bản sao () không lấy bất kỳ tham số nào ..
Sao chép () Giá trị trả về. Phương thức bản sao () trả về một danh sách mới. ....
Ví dụ: Sao chép một danh sách. # Danh sách hỗn hợp my_list = ['Cat', 0, 6.7] ....
Danh sách bản sao bằng cách sử dụng =.

Làm thế nào để bạn sao chép một danh sách này sang danh sách khác?

Một danh sách các yếu tố có thể được sao chép vào danh sách khác bằng nhiều cách ...
Cách số 1.Tạo một danh sách bằng cách chuyển một danh sách khác như một đối số của hàm tạo.....
Cách số 2.Danh sách copyoflist = new ArrayList ();CopyofList.Addall (Danh sách) ;.
Cách số 3.Sử dụng bộ sưu tập.....
Cách số 4.Sử dụng các luồng để tạo một bản sao của một danh sách.....
Thí dụ.....
Output..

Sao chép () Python là gì?

Phương thức Danh sách Python () trả về một bản sao nông của danh sách (trả về danh sách mới mà không sửa đổi danh sách ban đầu).return a shallow copy of a list(returns a new list without modifying the original lists).

Làm thế nào để bạn lặp lại một danh sách trong Python?

Sử dụng toán tử * Toán tử * cũng có thể được sử dụng để lặp lại các phần tử của danh sách.Khi chúng tôi nhân danh sách với bất kỳ số nào bằng toán tử *, nó sẽ lặp lại các phần tử của danh sách đã cho. The * operator can also be used to repeat elements of a list. When we multiply a list with any number using the * operator, it repeats the elements of the given list.