Tại sao chúng ta không có con trỏ trong Python?

Tóm lược. Trong hướng dẫn này, chúng ta sẽ tìm hiểu con trỏ trong Python là gì, chúng hoạt động như thế nào và chúng có tồn tại trong Python không?

Con trỏ là gì?

Con trỏ trong ngữ cảnh của các ngôn ngữ cấp cao như C++ hoặc Java không là gì ngoài các biến lưu trữ địa chỉ bộ nhớ của các biến hoặc đối tượng khác

Chúng ta có thể tham chiếu một biến khác được lưu trữ ở một vị trí bộ nhớ khác bằng con trỏ trong các ngôn ngữ lập trình cấp cao

Không giống như biến, con trỏ xử lý địa chỉ hơn là giá trị

Python có con trỏ không?

Đáng buồn thay, Python không có con trỏ như các ngôn ngữ khác để sử dụng rõ ràng nhưng được triển khai ngầm

Các loại như danh sách, từ điển, lớp và đối tượng, v.v. trong Python hoạt động giống như các con trỏ dưới mui xe

Toán tử gán

#Assign
l = [1,2,3,4]
m = l
#Modify only m
m[0] = 9
#changes reflected by both m and l
print["m =", m]
print["l =", l]
7 trong Python tự động tạo và gán một con trỏ cho biến

Ví dụ

l = [1,2,3,4]

Câu lệnh trên tạo một đối tượng danh sách và trỏ một con trỏ tới nó có tên là “l”

Nếu bạn gán cùng một đối tượng danh sách cho hai biến khác nhau m và l, chúng sẽ trỏ đến cùng một vị trí bộ nhớ

#Assign
l = [1,2,3,4]
m = l
#Modify only m
m[0] = 9
#changes reflected by both m and l
print["m =", m]
print["l =", l]

đầu ra

Để đảm bảo rằng m và l đang trỏ đến cùng một đối tượng, hãy sử dụng toán tử

#Assign
l = [1,2,3,4]
m = l
#Modify only m
m[0] = 9
#changes reflected by both m and l
print["m =", m]
print["l =", l]
8

>>> l = [1,2,3,4]
>>> m = l
>>> print[m is l]
True

Toán tử “is” trong Python hoạt động khác với toán tử “==”. Toán tử “==” trong Python trả về so sánh nội dung của đối tượng trong khi toán tử is so sánh tham chiếu của đối tượng

Ngoài ra, điều quan trọng cần lưu ý là python chỉ xóa một đối tượng khi tất cả các con trỏ tới đối tượng bị xóa

Sử dụng

#Assign
l = [1,2,3,4]
m = l
#Modify only m
m[0] = 9
#changes reflected by both m and l
print["m =", m]
print["l =", l]
9 hoặc
>>> l = [1,2,3,4]
>>> m = l
>>> print[m is l]
True
0 sẽ chỉ xóa biến chứ không xóa đối tượng cơ bản mà nó đang tham chiếu

Python sẽ vẫn giữ đối tượng trong bộ nhớ cho đến khi tất cả các con trỏ trỏ tới đối tượng danh sách bị xóa

Các số và chuỗi cũng là Con trỏ?

Câu trả lời là không. Các loại đơn giản như

>>> l = [1,2,3,4]
>>> m = l
>>> print[m is l]
True
1,
>>> l = [1,2,3,4]
>>> m = l
>>> print[m is l]
True
2,
#Assign
l = [1,2,3,4]
m = l
#Modify only m
m[0] = 9
#changes reflected by both m and l
print["m =", m]
print["l =", l]
0,
#Assign
l = [1,2,3,4]
m = l
#Modify only m
m[0] = 9
#changes reflected by both m and l
print["m =", m]
print["l =", l]
1, v.v. không hoạt động như một con trỏ

Hãy xem xét đoạn mã python sau

#Declare variables
a = 9
b = a
#modifying a
a = 2
print["a =",a]
print["b =",b]

đầu ra

Như chúng ta có thể thấy, việc thay đổi giá trị của “a” không làm thay đổi “b”. Do đó, không giống như một danh sách, giá trị của các biến số nguyên

#Assign
l = [1,2,3,4]
m = l
#Modify only m
m[0] = 9
#changes reflected by both m and l
print["m =", m]
print["l =", l]
2 và
#Assign
l = [1,2,3,4]
m = l
#Modify only m
m[0] = 9
#changes reflected by both m and l
print["m =", m]
print["l =", l]
3 được lưu trữ trong các địa chỉ hoặc vị trí bộ nhớ khác nhau

Trên một lưu ý cuối cùng, chúng tôi kết luận rằng Python không có con trỏ nhưng hành vi của con trỏ được triển khai dưới mui xe bởi python cho một số loại và đối tượng

Gán tên biến trong Python dễ như đặt tên biến ở bên trái dấu bằng [=]. Nhưng điều đó có nghĩa là những gì bạn nghĩ nó có nghĩa ??

Biến là thứ đầu tiên bạn sử dụng khi bắt đầu lập trình. Đó là điều đầu tiên bạn học trong bất kỳ ngôn ngữ lập trình nào. Cú pháp gán giá trị cho biến khác ngôn ngữ. Ví dụ, trong C, bạn sẽ chỉ định một loại biến và sau đó gán giá trị bằng dấu ‘=’

________số 8

Trong python, bạn không cần phải đề cập đến loại biến khi bạn gán giá trị cho nó

y = 5

Đây là ở cấp độ thực hiện. Nhưng nếu bạn tìm hiểu sâu hơn, bạn sẽ nhận ra nó còn nhiều hơn những gì nhìn thấy bằng mắt thường.

Xem khi bạn gán một giá trị cho biến trong ngôn ngữ như C, biến đó hoạt động như một thùng chứa hoặc vùng chứa mà bạn đặt giá trị vào đó

NHƯNG TRONG PYTHON BIẾN HOẠT ĐỘNG NHƯ MỘT CON TRỎ

Những gì hiện phương tiện này?

Hãy tìm ra điều này

Gán biến trong Python dễ như đặt tên biến ở bên trái dấu bằng [=]

y = 5

Điều này có vẻ đơn giản, nhưng nếu bạn có mô hình tinh thần sai về hoạt động này, thì cách thức hoạt động của Python có vẻ khó hiểu

Trong Python, các biến tốt nhất không nên được coi là vùng chứa mà là con trỏ. Vì vậy, trong python khi bạn viết

#Assign
l = [1,2,3,4]
m = l
#Modify only m
m[0] = 9
#changes reflected by both m and l
print["m =", m]
print["l =", l]
1

về cơ bản, bạn đang xác định một con trỏ có tên y trỏ đến một số nhóm khác chứa giá trị 5. Lưu ý một hậu quả của việc này. vì biến Python chỉ trỏ đến nhiều đối tượng khác nhau nên không cần “khai báo” biến, thậm chí yêu cầu biến luôn trỏ đến thông tin cùng loại

Đây là ý nghĩa mà mọi người nói Python được gõ động. tên biến có thể trỏ đến đối tượng thuộc bất kỳ loại nào. Vì vậy, trong python bạn có thể làm những việc như

#Assign
l = [1,2,3,4]
m = l
#Modify only m
m[0] = 9
#changes reflected by both m and l
print["m =", m]
print["l =", l]
2

Mặc dù người dùng ngôn ngữ kiểu thống kê có thể bỏ lỡ tính an toàn kiểu đi kèm với các khai báo như trong C, nhưng kiểu gõ động này là một trong những phần giúp Python viết nhanh và dễ đọc.

Có một hệ quả của cách tiếp cận “biến như con trỏ” này mà bạn cần lưu ý. Nếu chúng ta có hai tên biến trỏ đến cùng một đối tượng có thể thay đổi [có thể thay đổi giá trị], thì việc thay đổi cái này cũng sẽ thay đổi cái kia. Ví dụ: hãy tạo và sửa đổi danh sách

#Assign
l = [1,2,3,4]
m = l
#Modify only m
m[0] = 9
#changes reflected by both m and l
print["m =", m]
print["l =", l]
3

Chúng tôi đã tạo hai biến x và y đều trỏ đến cùng một đối tượng. Do đó, nếu chúng tôi sửa đổi danh sách thông qua một tên của nó, chúng tôi sẽ thấy rằng danh sách "khác" cũng sẽ được sửa đổi

#Assign
l = [1,2,3,4]
m = l
#Modify only m
m[0] = 9
#changes reflected by both m and l
print["m =", m]
print["l =", l]
4

Hành vi này có vẻ khó hiểu nếu bạn nghĩ sai về các biến là các thùng chứa dữ liệu. Nhưng nếu bạn đang nghĩ đúng về các biến là con trỏ tới đối tượng, thì hành vi này có ý nghĩa

Cũng lưu ý rằng nếu chúng ta sử dụng = để gán một giá trị khác cho x, điều này sẽ không ảnh hưởng đến giá trị của y-gán chỉ đơn giản là thay đổi những gì mà biến có thể trỏ tới

#Assign
l = [1,2,3,4]
m = l
#Modify only m
m[0] = 9
#changes reflected by both m and l
print["m =", m]
print["l =", l]
5

Một lần nữa, điều này hoàn toàn hợp lý nếu bạn coi x và y là con trỏ và toán tử = là một phép toán thay đổi tên trỏ đến

Bạn có thể thắc mắc liệu ý tưởng con trỏ này có làm cho các phép toán số học trong Python khó theo dõi hay không, nhưng Python được thiết lập để đây không phải là vấn đề. Số, chuỗi và các loại đơn giản khác là bất biến. bạn không thể thay đổi giá trị của chúng — bạn chỉ có thể thay đổi giá trị mà các biến trỏ tới. Vì vậy, ví dụ, hoàn toàn an toàn khi thực hiện các thao tác như sau

#Assign
l = [1,2,3,4]
m = l
#Modify only m
m[0] = 9
#changes reflected by both m and l
print["m =", m]
print["l =", l]
6

Khi chúng ta gọi x +=5, chúng ta không sửa đổi giá trị của đối tượng thứ 5 được trỏ tới bởi x, mà thay vào đó chúng ta đang thay đổi đối tượng mà x trỏ tới. Vì lý do này, giá trị của y không bị ảnh hưởng bởi hoạt động

Tôi hy vọng bài viết Biến dưới dạng con trỏ này đã xóa tan nghi ngờ của bạn về cách thức hoạt động của biến trong Python và ý nghĩa của việc gán giá trị cho biến trong Python. Hãy ghi nhớ điều này khi bạn gán giá trị cho biến trong Python vào lần tới

Tại sao con trỏ không được hỗ trợ trong Python?

Con trỏ có xu hướng tạo ra sự phức tạp trong mã, trong đó Python chủ yếu tập trung vào khả năng sử dụng hơn là tốc độ . Kết quả là Python không hỗ trợ con trỏ. Tuy nhiên, Python mang lại một số lợi ích khi sử dụng con trỏ. Trước khi tìm hiểu về con trỏ trong Python, chúng ta cần có khái niệm cơ bản về những điểm sau.

Có con trỏ hàm trong Python không?

Vì vậy, hàm cũng là đối tượng trong python . Như chúng ta biết rằng mọi đối tượng đều có id riêng, vì vậy chúng ta có thể truy cập và lưu trữ id đó vào một biến. Trong chương trình trên, fun là con trỏ hàm, nó đang trỏ đến một hàm i. e. Niềm vui của tôi[].

Chủ Đề