Mọi thứ trong python có phải là tài liệu tham khảo không?

Các nhà phát triển chuyển sang 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 đối số trong Python. Mô hình dữ liệu lấy đối tượng làm trung tâm 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.  

Trong bài viết này, chúng ta sẽ thảo luận về khái niệm về cách truyền giá trị theo tham chiếu trong Python và cố gắng hiểu các ví dụ về truyền tham chiếu trong Python

Truyền theo giá trị và truyền theo 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 chuẩn bị tinh thần. Mô hình truyền đối số của Python không phải là “Truyền theo giá trị” hay “Truyền theo tham chiếu” mà là “Truyền theo tham chiếu đối tượng”.  

Có thể hiểu các mô hình “Truyền theo giá trị”, “Truyền theo tham chiếu” và “Truyền theo tham chiếu đối tượng” 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




 a = ["X", "Y"]
04
 a = ["X", "Y"]
05
 a = ["X", "Y"]
06
 a = ["X", "Y"]
07

 a = ["X", "Y"]
08
 a = ["X", "Y"]
06
 a = ["X", "Y"]
10
 a = ["X", "Y"]
11
 a = ["X", "Y"]
0
 a = ["X", "Y"]
1
 a = ["X", "Y"]
2
 a = ["X", "Y"]
1
 a = ["X", "Y"]
4
 a = ["X", "Y"]
5

________ 108 ________ 07 ________ 106

 

 a = ["X", "Y"]
04
 a = ["X", "Y"]
040
 a = ["X", "Y"]
06
 a = ["X", "Y"]
07

 a = ["X", "Y"]
08
 a = ["X", "Y"]
06____1045
 a = ["X", "Y"]
046
 a = ["X", "Y"]
047

________ 108 ________ 07 ________ 106

 

 a = ["X", "Y"]
051
 a = ["X", "Y"]
10
 a = ["X", "Y"]
11
 a = ["X", "Y"]
054
 a = ["X", "Y"]
5

 

 a = ["X", "Y"]
056
 a = ["X", "Y"]
057

 

 a = ["X", "Y"]
056
 a = ["X", "Y"]
059

đầu ra

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

Bây giờ, hãy cùng khám phá đoạn mã trên,

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

Ở đây “a” là một biến trỏ đến một danh sách chứa phần tử “X” và “Y”. Nhưng bản thân “a” không phải là danh sách. Coi “a” là một nhóm chứa đối tượng “X” và “Y”.  

 a = ["X", "Y"]

 

Pass by Reference trong Python là gì?

Truyền theo tham chiếu có nghĩa là bạn phải truyền hàm [tham chiếu] cho một biến chỉ rằng biến đó đã tồn tại trong bộ nhớ.  

Ở đây, biến [cái xô] đượ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]

 

Trong hình ảnh mã ở trên, cả “list” và “my_list” đều là cùng một biến vùng chứa và do đó đề cập đến chính xác cùng một đối tượng 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 phản ánh trực tiếp bởi người gọi hàm. Chẳng hạn, hàm có thể thay đổi hoàn toàn nội dung của biến và trỏ nó vào một đối tượng hoàn toàn khác.  

 

Ngoài ra, hàm có thể gán lại nội dung của biến với tác dụng tương tự như bên dưới.  

 

Tóm lại, trong tham chiếu chuyển qua, hàm và người gọi sử dụng cùng một biến và đối tượng

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

Theo cách tiếp cận này, chúng tôi chuyển một bản sao của các biến thực trong hàm dưới dạng tham số. Do đó, bất kỳ sửa đổi nào đối với các tham số bên trong hàm sẽ không phản ánh trong biến thực tế

 

Điều này cũng đúng với mọi thao tác được thực hiện bởi hàm trên biến hoặc đối tượng

 

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

 a = ["X", "Y"]
19
 a = ["X", "Y"]
10
 a = ["X", "Y"]
21_______122
 a = ["X", "Y"]
15
 a = ["X", "Y"]
24
 a = ["X", "Y"]
15
 a = ["X", "Y"]
26
 a = ["X", "Y"]
15
 a = ["X", "Y"]
28
 a = ["X", "Y"]
29

 

 a = ["X", "Y"]
340

 a = ["X", "Y"]
19
 a = ["X", "Y"]
20____228
 a = ["X", "Y"]
344

Đầu ra 
 

 a = ["X", "Y"]
1

 

Ràng buộc tên đối tượng

Trong python, mỗi biến mà chúng ta gán giá trị/vùng chứa được coi là một đối tượng. Khi chúng ta gán một giá trị cho một biến, chúng ta thực sự đang gắn tên cho một đối tượng.
 

Python3




 a = ["X", "Y"]
345
 a = ["X", "Y"]
10
 a = ["X", "Y"]
347

 a = ["X", "Y"]
348
 a = ["X", "Y"]
10
 a = ["X", "Y"]
347

 

 

 a = ["X", "Y"]
421

 a = ["X", "Y"]
422

 a = ["X", "Y"]
19
 a = ["X", "Y"]
20____1425
 a = ["X", "Y"]
426

 

 a = ["X", "Y"]
421

 a = ["X", "Y"]
422

 a = ["X", "Y"]
19
 a = ["X", "Y"]
20____1425
 a = ["X", "Y"]
492

 

 a = ["X", "Y"]
493

 a = ["X", "Y"]
494

 a = ["X", "Y"]
19
 a = ["X", "Y"]
496
 a = ["X", "Y"]
497
 a = ["X", "Y"]
498

Đầu ra 
 

 a = ["X", "Y"]
2

Bây giờ, hãy thử và hiểu điều này tốt hơn bằng một ví dụ khác.
Ví dụ 2.
 

Python3




 a = ["X", "Y"]
345
 a = ["X", "Y"]
10
 a = ["X", "Y"]
21
 a = ["X", "Y"]
22
 a = ["X", "Y"]
15
 a = ["X", "Y"]
24
 a = ["X", "Y"]
15
 a = ["X", "Y"]
26
 a = ["X", "Y"]
29

 a = ["X", "Y"]
348
 a = ["X", "Y"]
10
 a = ["X", "Y"]
21
 a = ["X", "Y"]
22
 a = ["X", "Y"]
15
 a = ["X", "Y"]
24
 a = ["X", "Y"]
15
 a = ["X", "Y"]
26
 a = ["X", "Y"]
29

 

 a = ["X", "Y"]
107

 a = ["X", "Y"]
108

 a = ["X", "Y"]
109

 a = ["X", "Y"]
19
 a = ["X", "Y"]
20____1425
 a = ["X", "Y"]
426

 

 a = ["X", "Y"]
107

 a = ["X", "Y"]
108

 a = ["X", "Y"]
109

 a = ["X", "Y"]
19
 a = ["X", "Y"]
20____1425
 a = ["X", "Y"]
492

 

 a = ["X", "Y"]
121

 a = ["X", "Y"]
122

 a = ["X", "Y"]
19
 a = ["X", "Y"]
496
 a = ["X", "Y"]
497
 a = ["X", "Y"]
498

Đầu ra 
 

 a = ["X", "Y"]
8

Đầu ra của hai ví dụ trên khác nhau vì danh sách có thể thay đổi và chuỗi không thay đổi. Một biến bất biến không thể thay đổi sau khi được tạo. Nếu chúng ta muốn thay đổi một biến bất biến, chẳng hạn như một chuỗi, chúng ta phải tạo một thể hiện mới và liên kết biến với thể hiện mới. Trong khi đó, biến có thể thay đổi có thể được thay đổi tại chỗ.
Ví dụ 3.
 

Python3




 a = ["X", "Y"]
11
 a = ["X", "Y"]
128

 a = ["X", "Y"]
13

 a = ["X", "Y"]
13
 a = ["X", "Y"]
131

 a = ["X", "Y"]
13____2133

 a = ["X", "Y"]
13
 a = ["X", "Y"]
345
 a = ["X", "Y"]
10
 a = ["X", "Y"]
137

 a = ["X", "Y"]
13
 a = ["X", "Y"]
19
 a = ["X", "Y"]
20
 a = ["X", "Y"]
21
 a = ["X", "Y"]
142

 a = ["X", "Y"]
13

 a = ["X", "Y"]
13

 a = ["X", "Y"]
24

 a = ["X", "Y"]
49
 a = ["X", "Y"]
10
 a = ["X", "Y"]
148

 a = ["X", "Y"]
149

 

 a = ["X", "Y"]
19
 a = ["X", "Y"]
20____228
 a = ["X", "Y"]
22

Đầu ra.
 

 a = ["X", "Y"]
1

Trong ví dụ trên, một chuỗi là một loại đối tượng không thay đổi được truyền làm đối số cho hàm foo. Trong phạm vi của hàm đã cho foo, a= “giá trị mới” đã được liên kết với cùng một đối tượng mà chuỗi đã được liên kết bên ngoài. Trong phạm vi của hàm foo, chúng tôi sửa đổi “giá trị cũ”` thành “giá trị mới”. Khi chúng tôi rời khỏi phạm vi của chức năng foo , a=”new value” không còn trong không gian tên và giá trị mà chuỗi đề cập đến không bao giờ thay đổi.
Ví dụ 4. Bây giờ, chúng ta hãy xem biến có thể thay đổi được truyền vào hàm như thế nào.
 

Python3




 a = ["X", "Y"]
11
 a = ["X", "Y"]
128

 a = ["X", "Y"]
13
 a = ["X", "Y"]
157____2158
 a = ["X", "Y"]
29
 a = ["X", "Y"]
10
 a = ["X", "Y"]
161

 a = ["X", "Y"]
13

 a = ["X", "Y"]
163

 a = ["X", "Y"]
164
 a = ["X", "Y"]
10
 a = ["X", "Y"]
21
 a = ["X", "Y"]
167
 a = ["X", "Y"]
15
 a = ["X", "Y"]
169
 a = ["X", "Y"]
15
 a = ["X", "Y"]
171
 a = ["X", "Y"]
15
 a = ["X", "Y"]
173
 a = ["X", "Y"]
15
 a = ["X", "Y"]
175
 a = ["X", "Y"]
29

Mọi thứ có phải là loại tham chiếu trong Python không?

Tất cả giá trị trong Python đều là tham chiếu . Điều bạn cần lo lắng là nếu một loại có thể thay đổi. Các kiểu số và chuỗi cơ bản, cũng như tuple và freezeset là bất biến; .

Python có phải là giá trị hoặc tham chiếu không?

Python truyền các đối số không phải theo tham chiếu hay theo giá trị mà theo phép gán.

Phân công Python theo tham chiếu?

Python sử dụng một hệ thống, được gọi là “Gọi theo tham chiếu đối tượng” hoặc “Gọi theo chỉ định” . Trong trường hợp bạn truyền các đối số như số nguyên, chuỗi hoặc bộ cho một hàm, thì việc truyền giống như gọi theo giá trị vì bạn không thể thay đổi giá trị của các đối tượng bất biến được truyền cho hàm.

Mọi thứ trong Python có phải là một đối tượng không?

Mọi thứ đều là đối tượng . Trong Python, mọi thứ đều là một đối tượng, có nghĩa là mọi thực thể đều có một số siêu dữ liệu [được gọi là thuộc tính] và chức năng liên quan [được gọi là phương thức].

Chủ Đề