Cách sao chép một biến trong Python mà không thay đổi bản gốc
Trong blog này, chúng ta sẽ tìm hiểu về một phương thức mới trong Python - copy list. Trong khi viết mã, có những lúc người dùng cần sử dụng lại một đối tượng. Gõ lại từng dòng mã có vẻ vô dụng. Do đó, chúng tôi sử dụng phương pháp sao chép có sẵn trong danh sách Show
Mục lục
Giới thiệu về danh sách sao chépNghe có vẻ dễ dàng, sao chép một danh sách trong Python khá đơn giản. Nhưng chúng ta vẫn phải tuân theo cú pháp và biết khi nào và làm thế nào để sử dụng phương pháp sao chép danh sách. Phương pháp này giúp dễ dàng viết các phần mã xảy ra nhiều lầnNói rõ hơn, phương pháp này chỉ hoạt động trong danh sách Phương pháp danh sách sao chép PythonPhương thức copy() trong Python sao chép danh sách và trả về danh sách đã sao chép. Nó không nhận bất kỳ tham số nào và trả về một bản sao nông của danh sách cú pháp
Đầu vào
Ở đây, chúng tôi đã tạo một danh sách và sau đó sao chép danh sách. Khi bạn thêm một phần tử vào danh sách mới, bạn có thể thấy rằng danh sách cũ không hiển thị sửa đổi đầu ra
Sao chép danh sách bằng cách sử dụng =Chúng ta có thể sử dụng toán tử = để sao chép danh sách. Hạn chế duy nhất của phương pháp này là nó không tạo ra một bản sao nông Đầu vào
Ở đây, chúng tôi đã tạo một danh sách và sau đó sao chép danh sách. Khi bạn thêm một phần tử vào danh sách mới, bạn có thể thấy rằng danh sách cũ cũng được sửa đổi vì phương pháp này không tạo bản sao nông đầu ra
Sử dụng phương thức tích hợp list() để sao chép danh sáchMộ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, 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ũ Đầu vào
Ở đây, chúng tôi đã tạo một danh sách và sau đó sao chép danh sách. Khi bạn thêm một phần tử vào danh sách mới, bạn có thể thấy rằng danh sách cũ không hiển thị sửa đổi đầu ra
Bớt tư tưởngSao chép danh sách là một cách dễ dàng để sao chép trong Python. Đó là một phương thức tích hợp giúp viết mã dễ dàng hơn. Bạn có thể sử dụng các phương pháp khác được đề cập ở trên nhưng hãy chắc chắn rằng bạn biết về. Mọi người có thể đọc thêm về các khái niệm Python tại đây Cả spread ( let counter = 1; 3) và let counter = 1; 4 đều thực hiện một bản sao nông trong khi các phương thức JSON thực hiện một bản sao sâuBản sao nông vs. sao chép sâuTrong JavaScript, bạn sử dụng các biến để lưu trữ các giá trị có thể là giá trị nguyên thủy hoặc tham chiếu. Khi bạn tạo một bản sao của một giá trị được lưu trữ trong một biến, bạn tạo một biến mới có cùng giá trị. Đối với một giá trị nguyên thủy, bạn chỉ cần sử dụng một phép gán đơn giản let counter = 1; Và khi bạn thay đổi giá trị của biến được sao chép, giá trị của biến ban đầu vẫn giữ nguyên copiedCounter = 2; đầu ra 1 Tuy nhiên, nếu bạn sử dụng toán tử gán cho một giá trị tham chiếu, nó sẽ không sao chép giá trị. Thay vào đó, cả hai biến sẽ tham chiếu cùng một đối tượng trong bộ nhớ let person = { Và khi truy cập đối tượng thông qua biến mới (copiedPerson) và thay đổi giá trị thuộc tính của nó (tên) thì bạn cũng thay đổi giá trị thuộc tính của đối tượng copiedPerson.firstName = 'Jane'; đầu ra { Sao chép sâu có nghĩa là giá trị của biến mới bị ngắt kết nối với biến ban đầu trong khi sao chép nông có nghĩa là một số giá trị vẫn được kết nối với biến ban đầu Ví dụ sao chép nôngXem xét ví dụ sau let person = { trong ví dụ này
Đây là đầu ra { Tuy nhiên, khi bạn hiển thị các giá trị của đối tượng người, bạn sẽ thấy rằng thông tin địa chỉ đã thay đổi nhưng tên console.log(person); đầu ra let counter = 1; 0Lý do là địa chỉ là giá trị tham chiếu trong khi tên là giá trị nguyên thủy. Cả let counter = 1; 9 và copiedCounter = 2; 2 đều tham chiếu đến các đối tượng khác nhau nhưng những đối tượng này tham chiếu đến cùng một đối tượng copiedCounter = 2; 5Ví dụ sao chép sâuĐoạn mã sau thay thế phương thức let counter = 1; 4 bằng phương thức JSON để mang một bản sao sâu của đối tượng let counter = 1; 9let counter = 1; 1đầu ra let counter = 1; 2Trong ví dụ này, tất cả các giá trị trong đối tượng copiedCounter = 2; 2 bị ngắt kết nối với đối tượng let counter = 1; 9 ban đầu
Làm cách nào để tạo một bản sao danh sách bằng Python mà không thay đổi bản gốc?Phương thức Python copy() sao chép danh sách và trả về danh sách đã sao chép. Nó không nhận bất kỳ tham số nào và trả về một bản sao nông của danh sách. Bản sao nông là bản không hiển thị bất kỳ sửa đổi nào trong danh sách gốc.
Làm cách nào để sao chép danh sách mà không trỏ cùng một địa chỉ bộ nhớ tham chiếu?Để sao chép một danh sách hiện có sang một danh sách khác mà không cần tham chiếu, bạn có thể sử dụng phương thức copy() . Trong ví dụ này, chúng tôi đã sao chép danh sách đầu tiên sang danh sách thứ hai bằng hàm copy(). Danh sách thứ hai là một danh sách riêng biệt, không phải là một tài liệu tham khảo.
Sự khác biệt giữa Deepcopy và sao chép là gì?Một bản sao nông xây dựng một đối tượng phức hợp mới và sau đó (trong phạm vi có thể) chèn các tham chiếu vào đối tượng đó trong bản gốc. 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 đó .
Làm cách nào để sao chép danh sách mà không trỏ đến cùng một danh sách trong bộ nhớ Python?Để 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 danh sách dựng sẵn. copy() (có sẵn từ Python 3. 3). new_list = old_list. sao chép() bạn có thể cắt nó. new_list = old_list[. ] Bạn có thể sử dụng bản sao chung. sao chép(). nhập bản sao new_list = bản sao. bản sao (old_list) |