Hướng dẫn does python pass by value or string? - python có truyền theo giá trị hay chuỗi không?

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(______7

    

a = 'hello'
b = 'hello'
a is b        # True
0 list

def

a = 'hello'
b = 'hello'
a is b        # True
3______7

    list

a = 'hello'
b = 'hello'
a is b        # True
8
a = 'hello'
b = 'hello'
a is b        # True
9
c = 'hello'
d = 'he'
d += 'llo'
c is d        # False
0

    

a = 'hello'
b = 'hello'
a is b        # True
0 list

def

a = 'hello'
b = 'hello'
a is b        # True
3______7

c = 'hello'
d = 'he'
d += 'llo'
c is d        # False
9
a = 'a'
b = a    # b will hold a reference to string a
a += 'a'
a is b   # False
0

c = 'hello'
d = 'he'
d += 'llo'
c is d        # False
9
a = 'a'
b = a    # b will hold a reference to string a
a += 'a'
a is b   # False
2

Output:

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

c = 'hello'
d = 'he'
d += 'llo'
c is d        # False
4
 a = ["X", "Y"]
1
 a = ["X", "Y"]
2
c = 'hello'
d = 'he'
d += 'llo'
c is d        # False
7
 a = ["X", "Y"]
8

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

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

 a = ["X", "Y"]

Hướng dẫn does python pass by value or string? - python có truyền theo giá trị hay chuỗi khô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;

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;

Hướng dẫn does python pass by value or string? - python có truyền theo giá trị hay chuỗi không?

Ở đâ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 does python pass by value or string? - python có truyền theo giá trị hay chuỗi không?

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 does python pass by value or string? - python có truyền theo giá trị hay chuỗi không?

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;

Để 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ì?

Hướng dẫn does python pass by value or string? - python có truyền theo giá trị hay chuỗi không?

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 does python pass by value or string? - python có truyền theo giá trị hay chuỗi không?

Đ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;

Python vượt qua một chuỗi bằng cách tham chiếu. Lưu ý rằng hai chuỗi có cùng nội dung được coi là giống hệt nhau:does pass a string by reference. Notice that two strings with the same content are considered identical:

a = 'hello'
b = 'hello'
a is b        # True

Vì khi B được gán bởi một giá trị và giá trị đã tồn tại trong bộ nhớ, nó sử dụng cùng một tham chiếu của chuỗi. Lưu ý một thực tế khác, rằng nếu chuỗi được tạo động, có nghĩa là được tạo với các hoạt động chuỗi (tức là nối), biến mới sẽ tham chiếu một thể hiện mới của cùng một chuỗi:

c = 'hello'
d = 'he'
d += 'llo'
c is d        # False

Điều đó đang được nói, việc tạo một chuỗi mới sẽ phân bổ một chuỗi mới trong bộ nhớ và trả về một tham chiếu cho chuỗi mới, nhưng sử dụng một chuỗi hiện đang được tạo sẽ sử dụng lại cùng một thể hiện chuỗi. Do đó, việc truyền một chuỗi dưới dạng tham số hàm sẽ chuyển nó bằng tham chiếu hoặc nói cách khác, sẽ chuyển địa chỉ trong bộ nhớ của chuỗi.will pass it by reference, or in other words, will pass the address in memory of the string.

Và bây giờ đến mức bạn đang tìm kiếm- nếu bạn thay đổi chuỗi bên trong hàm, chuỗi bên ngoài hàm sẽ vẫn giữ nguyên và điều đó bắt nguồn từ tính bất biến chuỗi. Thay đổi một chuỗi có nghĩa là phân bổ một chuỗi mới trong bộ nhớ.

a = 'a'
b = a    # b will hold a reference to string a
a += 'a'
a is b   # False

Điểm mấu chốt:

Bạn không thể thực sự thay đổi một chuỗi. Giống như đối với có thể mọi ngôn ngữ lập trình khác (nhưng đừng trích dẫn tôi). Khi bạn vượt qua chuỗi như một đối số, bạn vượt qua một tham chiếu. Khi bạn thay đổi giá trị của nó, bạn thay đổi biến thành một vị trí khác trong bộ nhớ. Nhưng khi bạn thay đổi tham chiếu của một biến, các biến khác trỏ đến cùng một địa chỉ sẽ tự nhiên giữ giá trị cũ (tham chiếu) mà chúng giữ. Ước gì giải thích đủ rõ ràng

Python có đi qua 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..

Python có trở lại theo giá trị hoặc tham chiếu không?

Trong Python, các đối số luôn được truyền theo giá trị và các giá trị trả về luôn được trả về theo giá trị. Tuy nhiên, giá trị được trả về (hoặc thông qua) là một tham chiếu đến một đối tượng có khả năng được chia sẻ, có khả năng bị đột biến.return values are always returned by value. However, the value being returned (or passed) is a reference to a potentially shared, potentially mutable object.