Biến
>>> x.append[4]
>>> x
[1, 2, 3, 4]
>>> y
[1, 2, 3, 4]
1 bằng với biến >>> x.append[4]
>>> x
[1, 2, 3, 4]
>>> y
[1, 2, 3, 4]
2 tại thời điểm này, >>> x.append[4]
>>> x
[1, 2, 3, 4]
>>> y
[1, 2, 3, 4]
1 và >>> x.append[4]
>>> x
[1, 2, 3, 4]
>>> y
[1, 2, 3, 4]
2 cũng có cùng >>> x.append[4]
>>> x
[1, 2, 3, 4]
>>> y
[1, 2, 3, 4]
5, nghĩa là cả hai đều trỏ đến cùng một vị trí bộ nhớ>>> id[x]
140043174674888
>>> id[y]
140043174674888
Thay đổi một đối tượng mà 2 biến trỏ tới
Khi hai biến có cùng
>>> x.append[4]
>>> x
[1, 2, 3, 4]
>>> y
[1, 2, 3, 4]
5, cả hai biến đó đều trỏ đến cùng một đối tượng. Vì vậy, nếu chúng ta thay đổi đối tượng mà >>> x.append[4]
>>> x
[1, 2, 3, 4]
>>> y
[1, 2, 3, 4]
1 trỏ tới [bằng cách nối thêm vào danh sách đó] thì giờ đây >>> x.append[4]
>>> x
[1, 2, 3, 4]
>>> y
[1, 2, 3, 4]
1 sẽ có >>> x.append[4]
>>> x
[1, 2, 3, 4]
>>> y
[1, 2, 3, 4]
3 nhưng >>> x.append[4]
>>> x
[1, 2, 3, 4]
>>> y
[1, 2, 3, 4]
2 cũng vậy>>> x.append[4]
>>> x
[1, 2, 3, 4]
>>> y
[1, 2, 3, 4]
Lý do điều này xảy ra là tất cả về dòng mà chúng tôi đã viết ở trên
Bài tập không sao chép bất cứ thứ gì
Câu lệnh gán không bao giờ sao chép bất cứ thứ gì trong Python. Bài tập lấy một tên biến và trỏ chúng đến một đối tượng
Các biến không phải là thùng;
Khi tôi nói các biến là con trỏ, ý tôi là chúng không phải là thùng chứa các thứ
Khi bạn thực hiện một bài tập, bạn đang chỉ tên biến ở phía bên trái của dấu bằng [trong trường hợp này là ____12] cho bất kỳ đối tượng nào được tham chiếu ở phía bên phải của dấu bằng [danh sách mà ____11 đã có
Bản tóm tắt. 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
>>> x.append[4]
>>> x
[1, 2, 3, 4]
>>> y
[1, 2, 3, 4]
2 trong Python tự động tạo và gán một con trỏ cho biếnThí 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ử
>>> x.append[4]
>>> x
[1, 2, 3, 4]
>>> y
[1, 2, 3, 4]
3>>> 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
>>> x.append[4]
>>> x
[1, 2, 3, 4]
>>> y
[1, 2, 3, 4]
4 hoặc >>> x.append[4]
>>> x
[1, 2, 3, 4]
>>> y
[1, 2, 3, 4]
5 sẽ chỉ xóa biến chứ không xóa đối tượng cơ bản mà nó đang tham chiếuPython 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
Số và chuỗi cũng là Con trỏ phải không?
Câu trả lời là không. Các loại đơn giản như ________ 26, ________ 27, ________ 40, _______ 41, v.v. không hoạt động như một con trỏ
Hãy xem xét đoạn mã python sau
________số 8đầ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 nhauTrê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