Tôi có thể gán một danh sách cho một danh sách khác trong python không?

Vấn đề. Nếu bạn gán một đối tượng danh sách cho một biến mới bằng cách sử dụng

# Method 1: Slicing
old_list = ['Alice', 'Bob', 'Carl']
new_list = old_list[:]
new_list.append[42]
print[new_list]
# ['Alice', 'Bob', 'Carl']
4, mọi sửa đổi đối với
# Method 1: Slicing
old_list = ['Alice', 'Bob', 'Carl']
new_list = old_list[:]
new_list.append[42]
print[new_list]
# ['Alice', 'Bob', 'Carl']
5 sẽ thay đổi
# Method 1: Slicing
old_list = ['Alice', 'Bob', 'Carl']
new_list = old_list[:]
new_list.append[42]
print[new_list]
# ['Alice', 'Bob', 'Carl']
6. Lý do cho điều này là gì và làm thế nào bạn có thể sao chép hoặc sao chép danh sách để ngăn chặn sự cố này?

Thí dụ. Hãy xem xét ví dụ sau

old_list = ['Alice', 'Bob', 'Carl']
new_list = old_list
new_list.append[42]
print[old_list]
# ['Alice', 'Bob', 'Carl', 42]

Việc thêm một phần tử vào

# Method 1: Slicing
old_list = ['Alice', 'Bob', 'Carl']
new_list = old_list[:]
new_list.append[42]
print[new_list]
# ['Alice', 'Bob', 'Carl']
5 cũng sửa đổi danh sách ban đầu
# Method 1: Slicing
old_list = ['Alice', 'Bob', 'Carl']
new_list = old_list[:]
new_list.append[42]
print[new_list]
# ['Alice', 'Bob', 'Carl']
6. Do đó,
# Method 1: Slicing
old_list = ['Alice', 'Bob', 'Carl']
new_list = old_list[:]
new_list.append[42]
print[new_list]
# ['Alice', 'Bob', 'Carl']
6 hiện có bốn phần tử—mặc dù bạn không trực tiếp thay đổi nó

Giải trình

Vấn đề sửa đổi đồng thời "hai" danh sách này phát sinh do bạn không có hai danh sách mà chỉ có một danh sách duy nhất

Trong Python, mọi thứ đều là đối tượng. Bạn tạo một đối tượng danh sách mới

# Method 1: Slicing
old_list = ['Alice', 'Bob', 'Carl']
new_list = old_list[:]
new_list.append[42]
print[new_list]
# ['Alice', 'Bob', 'Carl']
0 nằm trong bộ nhớ máy của bạn. Cả hai tên biến
# Method 1: Slicing
old_list = ['Alice', 'Bob', 'Carl']
new_list = old_list[:]
new_list.append[42]
print[new_list]
# ['Alice', 'Bob', 'Carl']
5 và
# Method 1: Slicing
old_list = ['Alice', 'Bob', 'Carl']
new_list = old_list[:]
new_list.append[42]
print[new_list]
# ['Alice', 'Bob', 'Carl']
6 đều trỏ đến cùng một đối tượng trong bộ nhớ—nếu bạn sửa đổi một biến, thì bạn cũng sửa đổi biến kia

Công cụ tương tác sau trực quan hóa bộ nhớ được trình thông dịch Python sử dụng khi thực thi đoạn mã cụ thể này

Tập thể dục. Hình dung vấn đề phát sinh như thế nào bằng cách nhấp vào “Tiếp theo”

Bạn có hiểu nguồn gốc của vấn đề?

Tổng quan về giải pháp

Bạn có thể xem cả ba giải pháp được thảo luận trong hướng dẫn này trong trình bao Python tương tác của chúng tôi

Tập thể dục. Thay đổi danh sách ban đầu. Cả ba phương pháp vẫn tạo ra cùng một đầu ra?

Tiếp theo, bạn sẽ tìm hiểu chi tiết hơn về từng phương pháp

Phương pháp 1. cắt lát

Cách dễ nhất để tạo một bản sao nông của danh sách Python là cắt lát

# Method 1: Slicing
old_list = ['Alice', 'Bob', 'Carl']
new_list = old_list[:]
new_list.append[42]
print[new_list]
# ['Alice', 'Bob', 'Carl']

Thao tác cắt lát

# Method 1: Slicing
old_list = ['Alice', 'Bob', 'Carl']
new_list = old_list[:]
new_list.append[42]
print[new_list]
# ['Alice', 'Bob', 'Carl']
3 tạo một danh sách mới, vì vậy các biến
# Method 1: Slicing
old_list = ['Alice', 'Bob', 'Carl']
new_list = old_list[:]
new_list.append[42]
print[new_list]
# ['Alice', 'Bob', 'Carl']
5 và
# Method 1: Slicing
old_list = ['Alice', 'Bob', 'Carl']
new_list = old_list[:]
new_list.append[42]
print[new_list]
# ['Alice', 'Bob', 'Carl']
6 hiện trỏ đến các đối tượng khác nhau trong bộ nhớ. Nếu bạn thay đổi cái này, cái kia không thay đổi

Đây là cách có ít ký tự nhất và nhiều lập trình viên Python sẽ coi đây là cách Pythonic nhất. Nếu bạn muốn tìm hiểu thêm về cách cắt lát, hãy xem video sau và đi sâu vào hướng dẫn blog chi tiết

Hướng dẫn liên quan. Giới thiệu về Slicing trong Python

Hướng dẫn cơ bản để cắt lát trong Python


Xem video này trên YouTube

Phương pháp 2. Sao chép

Một cách khác là sử dụng phương pháp

# Method 1: Slicing
old_list = ['Alice', 'Bob', 'Carl']
new_list = old_list[:]
new_list.append[42]
print[new_list]
# ['Alice', 'Bob', 'Carl']
6 để tạo một bản sao nông của danh sách

# Method 2: Copy
old_list = ['Alice', 'Bob', 'Carl']
new_list = old_list.copy[]
new_list.append[42]
print[old_list]
# ['Alice', 'Bob', 'Carl']

Phương thức

# Method 1: Slicing
old_list = ['Alice', 'Bob', 'Carl']
new_list = old_list[:]
new_list.append[42]
print[new_list]
# ['Alice', 'Bob', 'Carl']
7 sao chép tất cả các phần tử của
# Method 1: Slicing
old_list = ['Alice', 'Bob', 'Carl']
new_list = old_list[:]
new_list.append[42]
print[new_list]
# ['Alice', 'Bob', 'Carl']
8 vào một danh sách mới. Danh sách mới là giá trị trả về của phương thức. Đó là một bản sao nông—bạn chỉ sao chép các tham chiếu đối tượng đến các thành phần danh sách chứ không phải bản thân các đối tượng

Kết quả giống như phương pháp cắt lát. bạn có hai biến trỏ đến hai đối tượng danh sách khác nhau trong bộ nhớ

Bạn có thể tìm hiểu thêm về phương pháp

# Method 1: Slicing
old_list = ['Alice', 'Bob', 'Carl']
new_list = old_list[:]
new_list.append[42]
print[new_list]
# ['Alice', 'Bob', 'Carl']
7 trong blog hướng dẫn chi tiết của tôi và video sau

Hướng dẫn liên quan. Python

# Method 1: Slicing
old_list = ['Alice', 'Bob', 'Carl']
new_list = old_list[:]
new_list.append[42]
print[new_list]
# ['Alice', 'Bob', 'Carl']
7 [Hướng dẫn cơ bản]

Bản sao danh sách Python[]


Xem video này trên YouTube

Phương pháp 3. Danh sách hiểu

Cách thứ ba để giải quyết vấn đề hai danh sách trỏ đến cùng một đối tượng trong bộ nhớ là cách hiểu danh sách để tạo danh sách mới

# Method 1: Slicing
old_list = ['Alice', 'Bob', 'Carl']
new_list = old_list[:]
new_list.append[42]
print[new_list]
# ['Alice', 'Bob', 'Carl']
0

Hiểu danh sách là một cách nhỏ gọn để tạo danh sách. Công thức đơn giản là

# Method 2: Copy
old_list = ['Alice', 'Bob', 'Carl']
new_list = old_list.copy[]
new_list.append[42]
print[old_list]
# ['Alice', 'Bob', 'Carl']
1

  • Biểu hiện. Phải làm gì với từng phần tử danh sách?
  • Định nghĩa bài văn. Những yếu tố để lựa chọn?

Bạn có thể xem video hướng dẫn và đọc qua bài viết blog liên quan để tìm hiểu thêm về nó

Giới thiệu đơn giản về hiểu danh sách trong Python


Xem video này trên YouTube

Hướng dẫn liên quan. Giới thiệu về hiểu danh sách

Đi đâu từ đây?

Đủ lý thuyết. Hãy thực hành một số

Các lập trình viên được trả sáu con số trở lên vì họ có thể giải quyết vấn đề hiệu quả hơn bằng cách sử dụng trí thông minh máy móc và tự động hóa

Để trở nên thành công hơn trong việc viết mã, hãy giải quyết nhiều vấn đề thực tế hơn cho người thực. Đó là cách bạn trau dồi những kỹ năng bạn thực sự cần trong thực tế. Rốt cuộc, việc sử dụng lý thuyết học tập mà không ai cần là gì?

Bạn xây dựng các kỹ năng mã hóa có giá trị cao bằng cách làm việc trên các dự án mã hóa thực tế

Bạn có muốn ngừng học với các dự án đồ chơi và tập trung vào các dự án mã thực tế giúp bạn kiếm tiền và giải quyết các vấn đề thực sự cho mọi người không?

🚀 Nếu câu trả lời của bạn là CÓ. , cân nhắc trở thành nhà phát triển Python tự do. Đó là cách tốt nhất để tiếp cận nhiệm vụ cải thiện kỹ năng Python của bạn—ngay cả khi bạn là người mới hoàn toàn

Nếu bạn chỉ muốn tìm hiểu về cơ hội làm việc tự do, vui lòng xem hội thảo trên web miễn phí của tôi “Cách xây dựng kỹ năng Python có thu nhập cao của bạn” và tìm hiểu cách tôi phát triển công việc viết mã của mình trực tuyến cũng như cách bạn có thể làm được—từ sự thoải mái của bạn

Tham gia hội thảo trên web miễn phí ngay bây giờ

Chris

Trong khi làm việc với tư cách là một nhà nghiên cứu trong các hệ thống phân tán, Dr. Christian Mayer tìm thấy tình yêu của mình với việc dạy sinh viên khoa học máy tính

Để giúp sinh viên đạt được mức độ thành công Python cao hơn, anh ấy đã thành lập trang web giáo dục lập trình Finxter. com. Ông là tác giả của cuốn sách lập trình nổi tiếng Python One-Liners [NoStarch 2020], đồng tác giả của loạt sách tự xuất bản Coffee Break Python, người đam mê khoa học máy tính, cộng tác viên tự do và chủ sở hữu của một trong 10 blog Python lớn nhất thế giới

Niềm đam mê của anh ấy là viết, đọc và mã hóa. Nhưng niềm đam mê lớn nhất của anh ấy là phục vụ các lập trình viên đầy tham vọng thông qua Finxter và giúp họ nâng cao kỹ năng của mình. Bạn có thể tham gia học viện email miễn phí của anh ấy tại đây

Chủ Đề