Python đi kèm với hai toán tử có thể được sử dụng để kiểm tra sự bằng nhau, đó là
>>> a == b
True
0 [khá phổ biến trong hầu hết các ngôn ngữ lập trình hiện đại] và >>> a == b
True
1. Đôi khi có thể khó phân biệt bạn nên sử dụng cái nào trong hai cái, đặc biệt nếu bạn không quen với mô hình gõ động của PythonTrong bài viết hôm nay, chúng ta sẽ thảo luận về mục đích của cả toán tử
>>> a == b
True
0 và >>> a == b
True
1 trong Python khi so sánh hai biến hoặc đối tượng. Ngoài ra, chúng tôi sẽ xem qua một ví dụ để giới thiệu khi nào nên sử dụng cái này hơn cái kiaĐối tượng, biến và tham chiếu trong Python
Mỗi khi chúng ta gán giá trị đối tượng cho một biến, các hành động sau được thực hiện
- Đối tượng chứa giá trị được tạo và lưu trữ trong bộ nhớ
- Tên biến được tạo [nếu nó chưa tồn tại]
- Tham chiếu đến vị trí bộ nhớ chứa đối tượng đã tạo được gán cho biến
Các biến Python không thực sự giữ các đối tượng. Thay vào đó, chúng thực sự giữ các tham chiếu đến các đối tượng. Nói cách khác, các biến trỏ đến các vị trí trong bộ nhớ đã được cấp phát để lưu trữ các đối tượng tương ứng.
Đôi khi chúng ta có thể cần kiểm tra xem hai đối tượng có cùng giá trị hay không trong khi trong những trường hợp khác, chúng ta có thể phải kiểm tra xem các đối tượng có giống hệt nhau không. Trong phần sau, chúng ta sẽ khám phá cách đạt được cả hai
Sự khác biệt giữa “là” và “==”
Bây giờ nếu bạn muốn thực hiện kiểm tra bằng nhau giữa hai biến, rất có thể bạn thực sự muốn kiểm tra xem hai biến có trỏ đến các đối tượng có giá trị bằng nhau không. Trong những trường hợp khác, bạn cũng có thể phải kiểm tra xem hai biến có trỏ đến cùng một đối tượng hay không
- Toán tử
>>> a == b
0 được sử dụng để kiểm tra xem hai biến tham chiếu đối tượng có cùng giá trị hay không
True - Toán tử
>>> a == b
1 được sử dụng để kiểm tra xem hai biến có trỏ đến cùng một đối tượng trong bộ nhớ hay không
True
Bây giờ, giả sử chúng ta có hai danh sách như hình bên dưới
a = [1, 2, 3]
b = [1, 2, 3]
>>> a == b
0 sẽ trả về
True>>> a == b
5 vì
True>>> a == b
6 và
True>>> a == b
7 trỏ đến các đối tượng có giá trị bằng nhau
True
>>> a == b
True
- Mặt khác,
>>> a == b
1 sẽ trả về
True>>> a == b
9 vì
True>>> a == b
6 và
True>>> a == b
7 không trỏ đến cùng một đối tượng. Mặc dù cả hai đối tượng đều có giá trị bằng nhau, nhưng chúng không giống nhau theo nghĩa là Python lưu trữ chúng ở các vị trí khác nhau trong bộ nhớ
True
Vị trí bộ nhớ của cả
>>> a == b
True
6 và >>> a == b
True
7 đều khác nhau>>> a == b
True
1Bây giờ nếu chúng ta gán
>>> a == b
True
6 cho biến >>> a == b
True
7, thì >>> a == b
True
1 sẽ trả về >>> a == b
True
5 vì cả hai biến đều trỏ đến cùng một đối tượng trong bộ nhớ>>> a == b
True
5Và địa chỉ bộ nhớ bây giờ sẽ giống hệt nhau
>>> a == b
True
6Lưu ý quan trọng
Toán tử
>>> a == b
True
1 có thể trả về >>> a == b
True
5 nếu được sử dụng với các biến trỏ đến số nguyên nhỏ ngay cả khi hai biến được khởi tạo độc lập>>> a == b
True
8Đây là một chi tiết triển khai của Python lưu trữ các giá trị số nguyên nhỏ hoặc chuỗi ký tự cho mục đích hiệu suất
Lưu ý rằng đối với các chuỗi hoặc giá trị số nguyên lớn hơn, toán tử
>>> a == b
True
1 sẽ hoạt động như bình thường>>> a == b
True
9Suy nghĩ cuối cùng
Trong bài viết hôm nay, chúng ta đã thảo luận về cách kiểm tra sự bằng nhau của đối tượng trong Python. Chúng tôi đã thảo luận ngắn gọn về cách các đối tượng, tham chiếu và giá trị được xử lý trong Python. Ngoài ra, chúng tôi đã khám phá sự khác biệt cơ bản giữa các toán tử
>>> a == b
True
1 và >>> a == b
True
0. Cái trước có thể được sử dụng để kiểm tra xem hai biến có giữ tham chiếu đến cùng một đối tượng được lưu trữ trong một vị trí bộ nhớ cụ thể hay không. Mặt khác, >>> a == b
True
0 được sử dụng để kiểm tra xem hai biến trỏ đến tham chiếu đối tượng có cùng giá trị hay khôngỞ phần đầu của bài viết, chúng ta đã thảo luận nhanh về cách các đối tượng, tham chiếu và giá trị được xử lý trong Python. Nếu bạn muốn tìm hiểu thêm về các khái niệm này và mô hình Dynamic Typing mà Python triển khai, hãy nhớ đọc bài viết Dynamic Typing in Python