Hướng dẫn python list pass by value - danh sách python vượt qua giá trị

Để sao chép danh sách, bạn có thể sử dụng list(a) hoặc a[:]. Trong cả hai trường hợp, một đối tượng mới được tạo ra. Tuy nhiên, hai phương pháp này có những hạn chế với các bộ sưu tập các đối tượng có thể thay đổi khi các đối tượng bên trong giữ nguyên tài liệu tham khảo của chúng:
These two methods, however, have limitations with collections of mutable objects as inner objects keep their references intact:

>>> a = [[1,2],[3],[4]]

>>> b = a[:]
>>> c = list(a)

>>> c[0].append(9)

>>> a
[[1, 2, 9], [3], [4]]
>>> c
[[1, 2, 9], [3], [4]]
>>> b
[[1, 2, 9], [3], [4]]
>>> 

Nếu bạn muốn có một bản sao đầy đủ của các đối tượng của mình, bạn cần sao chép.deepcopy

>>> from copy import deepcopy
>>> a = [[1,2],[3],[4]]

>>> b = a[:]
>>> c = deepcopy(a)

>>> c[0].append(9)

>>> a
[[1, 2], [3], [4]]
>>> b
[[1, 2], [3], [4]]
>>> c
[[1, 2, 9], [3], [4]]
>>> 

Các nhà phát triển nhảy vào lập trình Python từ các ngôn ngữ khác như C ++ và Java thường bị nhầm lẫn bởi quá trình truyền các đối số trong Python. Mô hình dữ liệu tập trung vào đối tượng và cách xử lý phân công của nó là nguyên nhân đằng sau sự nhầm lẫn ở cấp độ cơ bản. & NBSP;

Trong bài viết, chúng tôi sẽ thảo luận về khái niệm về cách truyền giá trị bằng cách tham khảo trong Python và cố gắng hiểu các ví dụ ngang qua trong Python.how to pass a value by reference in Python and try to understand pass-by-reference examples in Python.

Vượt qua giá trị và vượt qua tham chiếu trong Python

Bạn có thể muốn đấm một cái gì đó sau khi đọc trước, vì vậy hãy tự chuẩn bị. Mô hình truyền đối số của Python, không phải là người vượt qua giá trị, cũng không vượt qua bởi tham chiếu, nhưng đó là lần vượt qua tham chiếu đối tượng. & NBSP;neither “Pass by Value” nor “Pass by Reference” but it is “Pass by Object Reference”. 

Các mô hình của Pass Pass By Value, Pass Pass By tham chiếu và Pass Pass By By Accident Tham khảo đối tượng có thể được hiểu bằng cách khám phá các hàm ví dụ dưới đây. Nhìn vào hai chức năng được xác định dưới đây:

Python3

def set_list(list

Is

>>> from copy import deepcopy
>>> a = [[1,2],[3],[4]]

>>> b = a[:]
>>> c = deepcopy(a)

>>> c[0].append(9)

>>> a
[[1, 2], [3], [4]]
>>> b
[[1, 2], [3], [4]]
>>> c
[[1, 2, 9], [3], [4]]
>>> 
0
['A', 'B', 'C']
['E', 'D']
1 list

def

['A', 'B', 'C']
['E', 'D']
4list

>>> from copy import deepcopy
>>> a = [[1,2],[3],[4]]

>>> b = a[:]
>>> c = deepcopy(a)

>>> c[0].append(9)

>>> a
[[1, 2], [3], [4]]
>>> b
[[1, 2], [3], [4]]
>>> c
[[1, 2, 9], [3], [4]]
>>> 
0list
['A', 'B', 'C']
['E', 'D']
9
 a = ["X", "Y"]
0
 a = ["X", "Y"]
1

>>> from copy import deepcopy
>>> a = [[1,2],[3],[4]]

>>> b = a[:]
>>> c = deepcopy(a)

>>> c[0].append(9)

>>> a
[[1, 2], [3], [4]]
>>> b
[[1, 2], [3], [4]]
>>> c
[[1, 2, 9], [3], [4]]
>>> 
0
['A', 'B', 'C']
['E', 'D']
1 list

def

['A', 'B', 'C']
['E', 'D']
4list

list(a)0list(a)1

list(a)0list(a)3

Output:

['A', 'B', 'C']
['E', 'D']

Bây giờ, hãy để khám phá mã trên, & nbsp;

Biến không phải là đối tượng

Ở đây, một người khác là một biến chỉ vào một danh sách chứa phần tử của X X và và Y. Nhưng bản thân một người khác không phải là danh sách. Hãy xem xét một người khác là một cái xô chứa đối tượng là X X và và Y. & NBSP;

 a = ["X", "Y"]

Hướng dẫn python list pass by value - danh sách python vượt qua giá trị

Những gì vượt qua bằng cách tham khảo trong Python?

Truyền bằng tham chiếu có nghĩa là bạn phải chuyển hàm (tham chiếu) đến một biến đề cập rằng biến đã tồn tại trong bộ nhớ. & NBSP;

Ở đây, biến (nhóm) được truyền trực tiếp vào hàm. Biến hoạt động như một gói đi kèm với nội dung của nó (các đối tượng).

Hướng dẫn python list pass by value - danh sách python vượt qua giá trị

Trong hình ảnh mã trên, cả hai danh sách của người dùng và và My_list là cùng một biến chứa và do đó đề cập đến cùng một đối tượng chính xác trong bộ nhớ. Bất kỳ hoạt động nào được thực hiện bởi hàm trên biến hoặc đối tượng sẽ được người gọi chức năng phản ánh trực tiếp. Chẳng hạn, hàm có thể thay đổi hoàn toàn nội dung biến và trỏ nó vào một đối tượng hoàn toàn khác: & nbsp;

Hướng dẫn python list pass by value - danh sách python vượt qua giá trị

Ngoài ra, hàm có thể gán lại nội dung của biến có cùng hiệu ứng như dưới đây: & nbsp;

Hướng dẫn python list pass by value - danh sách python vượt qua giá trị

Để tóm tắt, trong tham chiếu qua chức năng và người gọi sử dụng cùng một biến và đối tượng.

Truyền qua giá trị trong Python là gì?

Trong phương pháp này, chúng tôi vượt qua một bản sao của các biến thực tế trong chức năng như một tham số. Do đó, bất kỳ sửa đổi nào trên các tham số bên trong hàm sẽ không phản ánh trong biến thực tế.

Hướng dẫn python list pass by value - danh sách python vượt qua giá trị

Điều tương tự cũng đúng với bất kỳ hoạt động nào được thực hiện bởi hàm trên biến hoặc đối tượng & nbsp;

Hướng dẫn python list pass by value - danh sách python vượt qua giá trị

Để tóm tắt các bản sao của các biến và các đối tượng trong bối cảnh người gọi của hàm được phân lập hoàn toàn.

Danh sách Python có được vượt qua theo giá trị không?

Python chuyển các đối số không bằng cách tham chiếu cũng như giá trị, mà bằng cách gán., but by assignment.

Là một danh sách được thông qua bởi giá trị?

Nó được thông qua bởi giá trị của tham chiếu.Vì vậy, các sửa đổi đối với đối tượng có thể được nhìn thấy bên ngoài hàm, nhưng việc gán biến cho một đối tượng mới không thay đổi bất cứ điều gì bên ngoài hàm.Về cơ bản, nó giống như chuyển một con trỏ trong C hoặc loại tham chiếu trong Java.. So modifications to the object can be seen outside the function, but assigning the variable to a new object does not change anything outside the function. It's essentially the same as passing a pointer in C, or a reference type in Java.

Bạn có thể vượt qua một danh sách trong Python?

Bạn có thể gửi bất kỳ loại dữ liệu nào của đối số đến một hàm (chuỗi, số, danh sách, từ điển, v.v.) và nó sẽ được coi là cùng một loại dữ liệu bên trong hàm..

Điều gì vượt qua bởi giá trị có nghĩa là python?

Truyền theo giá trị - Điều đó có nghĩa là giá trị được truyền trực tiếp dưới dạng giá trị cho đối số của hàm.Ở đây, hoạt động được thực hiện trên giá trị và sau đó giá trị được lưu trữ tại địa chỉ.Vượt qua giá trị được sử dụng cho một bản sao của biến.the value is directly passed as the value to the argument of the function. Here, the operation is done on the value and then the value is stored at the address. Pass by value is used for a copy of the variable.