So sánh hai đối tượng là một nhiệm vụ khá phổ biến trong khi mã hóa bất kỳ loại phần mềm nào. Để so sánh chuỗi và biến số chúng ta thường áp dụng toán tử đẳng thức ==
, tuy nhiên, để so sánh hai đối tượng thì toán tử is
phù hợp hơn
Trong bài đăng này, chúng tôi cố gắng giải thích cách hoạt động của hai toán tử này, hiển thị một số ví dụ và cố gắng làm rõ những nghi ngờ của bạn về chủ đề này
Hãy bình luận hoặc liên lạc với tôi nếu cần thiết;
Bình đẳng hay bản sắc?Để hiểu rõ hơn về hai khái niệm này, chúng ta sẽ sử dụng phép loại suy về hai anh em sinh đôi. Họ trông thật giống nhau. Nếu bạn nhìn vào một bức ảnh của họ, có lẽ bạn không thể nói ai là ai
Toán tử ==
được gọi là đẳng thức. Nếu cặp song sinh là đối tượng Python, thì nếu chúng ta sử dụng toán tử ==
, nó sẽ trả về câu trả lời là "Cả hai đều bình đẳng"
Toán tử is
được gọi là danh tính. Nếu chúng ta sử dụng is
để so sánh chúng, chúng ta sẽ nhận được câu trả lời là "Cả hai đều không bằng nhau". Họ có tên, thị hiếu và hành vi khác nhau
Mọi người đều biết họ trông giống nhau, nhưng trong sâu thẳm, họ không phải là một người nào đó, phải không? . Con người ai cũng cần phát triển nhân cách và cuộc sống đúng không?
Bây giờ, hãy xem một số mã để mở rộng các khái niệm này
Nếu không rõ với ví dụ truyền thống này với cặp song sinh, có thể với số nguyên và danh sách, bạn sẽ hiểu
Hãy cẩn thận với các số nguyên nhỏ [chúng được thực tập]Trong ví dụ đầu tiên của chúng tôi, chúng tôi so sánh các biến a và b. Cả hai đều được gán 256 làm giá trị. Và các biến c và d, được gán với 257. Hãy nhìn vào hình bên dưới. Kết quả có ý nghĩa với bạn không?
256 bằng 256
Trước hết, nếu bạn quan tâm đến việc so sánh các giá trị số nguyên, bạn nên sử dụng toán tử đẳng thức ==. Toán tử nhận dạng sẽ thực hiện so sánh địa chỉ bộ nhớ. Hãy tưởng tượng chúng sẽ hoạt động như id[a]==id[b], trong đó hàm id[] trả về địa chỉ bộ nhớ của từng biến
257 không bằng 257 thì làm sao được?
Thứ hai, đằng sau hậu trường, Python thực tập các đối tượng với các giá trị thường được sử dụng [ví dụ: các số nguyên -5 đến 256] để
Do đó, kết quả so sánh giữa c và d là Sai khi sử dụng toán tử là
Nếu bạn không cảm thấy tự tin, hãy thử mã vào máy của bạn. Trong mã chúng tôi tin tưởng
Trong mã chúng tôi tin tưởng
Hàm id[] trả về địa chỉ bộ nhớ của một biến. Nó được gọi là danh tính biến
Chúng tôi sẽ tạo một danh sách có tên list_a
chứa các phần tử [1, 2, 3]
và một danh sách khác list_b
sẽ là bản sao của list_a.
Sử dụng cách in, chúng ta có thể thấy rằng cả hai biến nội dung dường như giống hệt nhau. Vì chúng trông giống nhau nên kết quả sẽ là "True" khi chúng ta so sánh bằng cách sử dụng toán tử ==
Để so sánh xem cả hai biến có trỏ đến cùng một đối tượng hay không, chúng ta nên so sánh hơn là sử dụng toán tửis
. Lệnh này sẽ xác nhận rằng cả hai biến đều trỏ đến một đối tượng danh sách
Sử dụng hàm is
2, chúng ta có thể kiểm tra xem các biến có đang trỏ đến cùng một địa chỉ không. Bây giờ, hãy tạo một danh sách khác có tên_______1_______3 bằng cách sử dụng is
4 chứa các phần tử của danh sách is
5
Nếu chúng ta nhìn vào is
3, thì nó giống với danh sách được chỉ ra bởi list_a
và list_b
. Tuy nhiên, nó không giống với danh tính của list_a
như của list_b
Chúng tôi có thể xác minh rằng toán tử ==
cho ==
2 vì cả hai đều có cùng nội dung. Tuy nhiên, is
3 được lưu trữ ở một địa chỉ khác, khi đó toán tử is
cho kết quả “Sai”
Python đang nói với chúng ta rằng is
3 và list_a
đang trỏ đến hai đối tượng khác nhau, mặc dù nội dung của chúng có thể giống nhau
Hình bên dưới là một ví dụ khác khi hai danh sách có thể có cùng nội dung và hai danh tính khác nhau. Hãy xem hai bản in cuối cùng và quan sát cách biến được lưu trữ vào hai địa chỉ khác nhau
Cuối cùng, hãy chú ý khi bạn sao chép các biến. Cách bạn sao chép chúng có thể tạo ra một con trỏ và khi bạn sửa đổi một con trỏ, bạn sẽ sửa đổi con trỏ kia
Sử dụng đúng toán tửBây giờ chúng ta đã hiểu sự khác biệt giữa == và bây giờ chúng ta hãy xem xét khi nào chúng ta nên sử dụng hai toán tử này
Sử dụng đẳng thức [ == ]Khuyến nghị tiêu chuẩn là sử dụng == và. = toán tử để so sánh các giá trị. Ngoại trừ khi so sánh với Không. Trong trường hợp này, bạn không cần quan tâm đến vị trí bộ nhớ của các biến. Bạn chỉ muốn kiểm tra xem nội dung trong cả hai biến này có giống nhau không
Sử dụng Danh tính [ is ]Sử dụng toán tử này nếu bạn muốn so sánh danh tính của hai đối tượng, nghĩa là nếu chúng được lưu trữ trong cùng một vị trí bộ nhớ, hãy sử dụng toán tử is và is not. Các toán tử này đặc biệt hữu ích trong việc so sánh các biến với Không và được ưu tiên hơn các phương thức lớp trong khi so sánh các biến với Không. Trong các trường hợp khác, tránh nó
Vì vậy, tôi hy vọng bài đăng này sẽ làm sáng tỏ bất kỳ nghi ngờ nào của bạn về ==
và is
. Thay vào đó, nếu bây giờ bạn có nhiều nghi ngờ hơn, hãy để lại nhận xét và tôi sẽ trả lời bạn