Hot deal hosting vps vietnix tháng 2Hot deal hosting vps vietnix tháng 2
PHP
Python

Trang chủ

Tìm hiểu toán tử nhận dạng trong Python

Ngôn ngữ Python là một ngôn ngữ lập trình đa mục đích, nổi tiếng với cú pháp dễ đọc, dễ học và tính ứng dụng cao. Trong lĩnh vực phát triển web, Python thường được sử dụng thông qua các framework như Django và Flask để xây dựng các ứng dụng web mạnh mẽ, bảo mật và dễ mở rộng. Trong chuyên mục này, Vietnix không chỉ cung cấp kiến thức nền tảng về ngôn ngữ Python mà còn hướng dẫn chi tiết cách xây dựng các ứng dụng web thực tế, sử dụng các framework phổ biến và áp dụng các kỹ thuật tiên tiến. Vietnix cam kết liên tục cập nhật những bài viết mới nhất về các tính năng mới của Python, các thư viện hỗ trợ hữu ích và những phương pháp tốt nhất, giúp bạn khai thác tối đa sức mạnh của Python và hoàn thiện kỹ năng lập trình web của mình.
html
CSS
javascript
sql
python
php
c
c++
bootstrap
react
mysql
reactjs
vuejs
Javascript Tutorials
06/02/2025
8 phút đọc
Theo dõi Vietnix trên

Tìm hiểu toán tử nhận dạng trong Python

Toán tử nhận dạng trong Python đóng vai trò quan trọng để kiểm tra xem hai biến có thực sự tham chiếu đến cùng một đối tượng trong bộ nhớ hay không. Để hiểu rõ hơn về các loại toán tử nhận dạng phổ biến và cách sử dụng chúng, đặc biệt là toán tử is và is not, mời bạn đọc cùng theo dõi chi tiết trong bài viết này để nắm vững kiến thức cần thiết và ứng dụng hiệu quả trong công việc.

Các điểm chính

Khi đọc xong bài viết, bạn sẽ:

  • Hiểu Rõ Khái Niệm Toán Tử Nhận Dạng: Bạn sẽ nắm vững định nghĩa và mục đích sử dụng của toán tử nhận dạng trong Python, giúp bạn phân biệt nó với các loại toán tử khác.
  • Phân Biệt is và is not: Bạn sẽ hiểu sự khác biệt then chốt giữa hai toán tử is và is not, biết khi nào nên sử dụng toán tử nào cho phù hợp với từng tình huống.
  • Nắm Vững Cách Sử Dụng Toán Tử Trong Thực Tế: Thông qua các ví dụ minh họa về chuỗi, danh sách và ID của các phần tử, bạn sẽ học được cách áp dụng toán tử nhận dạng vào giải quyết các vấn đề lập trình cụ thể.
  • Khám Phá Chi Tiết ID Của Các Phần Tử Trong List: Tìm hiểu sâu hơn về ID của các phần tử giúp người học hiểu rõ hơn về cơ chế hoạt động và lưu trữ dữ liệu trong Python
  • Có Thêm Tài Nguyên Học Lập Trình Python Chất Lượng: Biết đến Vietnix như một nguồn tài liệu và khóa học lập trình online hữu ích, hỗ trợ quá trình học tập của bạn.

Toán tử nhận dạng trong Python

Toán tử nhận dạng trong Python dùng để so sánh hai đối tượng, xác định xem hai đối tượng có cùng vị trí trên bộ nhớ, và cùng kiểu dữ liệu (data type) hay không.

Trong Python có 2 loại toán tử nhận dạng là isis not.

Toán tử nhận dạng trong Python giúp so sánh và xác định hại đối tượng có cũng ví trí trên bộ nhớ hay không
Toán tử nhận dạng trong Python giúp so sánh và xác định hại đối tượng có cũng ví trí trên bộ nhớ hay không

Toán tử is

Toán tử is sẽ trả về giá trị True nếu hai đối tượng ở hai bên toán tử cùng chia sẻ một vị trí ô nhớ. Để xác định vị trí ô nhớ của một đối tượng, chúng ta có thể dùng hàm id(). Nếu id() của hai biến cho ra kết quả giống nhau, thì toán tử is trả về True.

Để bạn dễ hình dung, hãy tưởng tượng hai người bạn cùng chung nhau một phòng trọ. Dù hai bạn là hai cá thể riêng biệt, nhưng khi nói đến địa chỉ, thì cả hai bạn sẽ có chung một địa chỉ.

xe_cua_ban = ["Honda", "mau_do", 2023]
# Bạn của bạn mượn xe của bạn và vẫn sử dụng chính chiếc xe đó.
xe_ban_muon = xe_cua_ban
# Tạo một chiếc xe y hệt
xe_moi_mua_giong_het = ["Honda", "mau_do", 2023]
# So sánh sử dụng 'is'
print(xe_cua_ban is xe_ban_muon)
print(xe_cua_ban is xe_moi_mua_giong_het)
# Xem địa chỉ trong bộ nhớ (ID)
print("id(xe_cua_ban) : ", id(xe_cua_ban))
print("id(xe_ban_muon): ", id(xe_ban_muon))
print("id(xe_moi_mua_giong_het) : ", id(xe_moi_mua_giong_het))

Khi thực thi, code trên sẽ cho kết quả:

True
False
id(xe_cua_ban) : [một_số_id_nào_đó]
id(xe_ban_muon): [một_số_id_nào_đó_giống_hệt_id_trên]
id(xe_moi_mua_giong_het) : [một_số_id_khác]

Toán tử is not

Toán tử is not trong Python được dùng để kiểm tra xem hai đối tượng có khác biệt về vị trí trên bộ nhớ hay không. Kết quả của phép so sánh is not là True nếu hai đối tượng không cùng nằm trên một ô nhớ, và False nếu ngược lại.

Để dễ hình dung, hãy tưởng tượng bạn có hai cuốn sổ tay:

so_tay_cua_An = ["Việc A", "Việc B", "Việc C"]  # An có một cuốn sổ tay
so_tay_cua_Binh = ["Việc A", "Việc B", "Việc C"]  # Bình cũng có một cuốn sổ tay
so_tay_cua_An_Ban_Sao = so_tay_cua_An # An tạo một bản sao của số tay của bạn

# So sánh
print("Sổ tay của An có khác sổ tay An bản sao không? ", so_tay_cua_An is not so_tay_cua_An_Ban_Sao)
print("Sổ tay của An có khác sổ tay của Bình không? ", so_tay_cua_An is not so_tay_cua_Binh)

# Xem vị trí trên bộ nhớ (bạn không cần nhớ các con số này, chỉ cần quan sát sự giống/khác nhau)
print("Vị trí sổ tay An:", id(so_tay_cua_An))
print("Vị trí sổ tay Bình:", id(so_tay_cua_Binh))
print("Vị trí bản sao sổ tay An:", id(so_tay_cua_An_Ban_Sao))

Khi chạy code, bạn sẽ thấy:

Sổ tay của An có khác sổ tay An bản sao không? False
Sổ tay của An có khác sổ tay của Bình không? True
Vị trí sổ tay An: 140559927442176 (Ví dụ)
Vị trí sổ tay Bình: 140559925598080 (Ví dụ)
Vị trí bản sao sổ tay An: 140559927442176 (Ví dụ)

Lưu ý:

  • is not: Kiểm tra xem hai biến có cùng trỏ đến một đối tượng trong bộ nhớ hay không.
  • !=: Kiểm tra xem giá trị của hai biến có khác nhau hay không.
  • Trong ví dụ trên, nếu bạn thay is not bằng !=: kết quả sẽ khác (so_tay_cua_An != so_tay_cua_Binh sẽ trả về False vì nội dung của hai danh sách này giống nhau, mặc dù chúng ở các vị trí khác nhau trên bộ nhớ).

Một vài ví dụ về toán tử nhận dạng trong Python

Để bạn hiểu rõ hơn về toán tử này, hãy xem qua các ví dụ dưới đây.

Ví dụ 1: Chuỗi

chuoi_A = "HocPython"
chuoi_B = chuoi_A

print("ID của chuoi_A:", id(chuoi_A))
print("ID của chuoi_B:", id(chuoi_B))
print("chuoi_A is chuoi_B:", chuoi_A is chuoi_B) #Kiểm tra ID
print("chuoi_B is not chuoi_A:", chuoi_B is not chuoi_A) #Kiểm tra ID

Kết quả:

ID của chuoi_A: 140734682150032
ID của chuoi_B: 140734682150032
chuoi_A is chuoi_B: True
chuoi_B is not chuoi_A: False

Giải thích:

  • id(): là một hàm Python trả về “định danh” (identity) của một đối tượng. Định danh này là một số nguyên duy nhất và không đổi trong suốt vòng đời của đối tượng đó. Nó có thể được xem như địa chỉ của đối tượng trong bộ nhớ.
  • Ví dụ: Trong ví dụ này, chuoi_B = chuoi_A không tạo ra một bản sao của chuỗi “HocPython”. Thay vào đó, chuoi_B chỉ đơn giản là một tham chiếu khác đến cùng một đối tượng chuỗi “HocPython” mà chuoi_A đang trỏ tới. Vì vậy, id(chuoi_A)id(chuoi_B) giống hệt nhau.
  • Kết quả: Do đó, chuoi_A is chuoi_B trả về Truechuoi_B is not chuoi_AFalse.

Ví dụ 2: Danh sách (list)

danh_sach_A = [1, 2, 3]
danh_sach_B = [1, 2, 3]
print("ID của danh_sach_A", id(danh_sach_A))
print("ID của danh_sach_B", id(danh_sach_B))
print("danh_sach_A is danh_sach_B:", danh_sach_A is danh_sach_B)  # Kiểm tra id
print("danh_sach_B is not danh_sach_A:", danh_sach_B is not danh_sach_A)  # Kiểm tra id

Kết quả:

ID của danh_sach_A 1954971968128
ID của danh_sach_B 1954926570880
danh_sach_A is danh_sach_B: False
danh_sach_B is not danh_sach_A: True

Giải thích:

  • Ở đây, danh_sach_Adanh_sach_B tuy có cùng giá trị các phần tử nhưng lại là hai đối tượng list khác nhau, được lưu ở hai vị trí khác nhau trên bộ nhớ.
  • Vì vậy id(danh_sach_A)id(danh_sach_B) cho hai giá trị khác nhau, dẫn đến danh_sach_A is danh_sach_BFalsedanh_sach_B is not danh_sach_ATrue.

Ví dụ 3: ID của các phần tử trong list

print (id(danh_sach_A[0]), id(danh_sach_A[1]), id(danh_sach_A[2]))
print (id(danh_sach_B[0]), id(danh_sach_B[1]), id(danh_sach_B[2]))

Điều này sẽ thu được kết quả sau:

Kết quả:

2739311598832 2739311598864 2739311598896
2739311598832 2739311598864 2739311598896

Giải thích chi tiết:

  • danh_sach_Adanh_sach_B là hai đối tượng list khác nhau (như đã thấy ở ví dụ 2), các phần tử bên trong chúng lại có thể tham chiếu đến cùng một đối tượng số nguyên.
  • Trong Python, các số nguyên nhỏ (thường từ -5 đến 256) được lưu trữ trong một “hồ” (pool) các đối tượng số nguyên. Khi bạn tạo một biến có giá trị là một trong những số nguyên này, Python chỉ đơn giản là cho biến đó trỏ đến đối tượng số nguyên đã có sẵn trong hồ, thay vì tạo một đối tượng mới. Đây là cơ chế tối ưu hóa bộ nhớ.
  • Vì lý do đó id(danh_sach_A[0]), và id(danh_sach_B[0]) có cùng một địa chỉ: vì Python đưa 2 biến trỏ tới một cùng số 1 ở 1 địa chỉ.

Lời kết

Vậy là chúng ta vừa cùng nhau khám phá chi tiết về toán tử nhận dạng trong Python, bao gồm is và is not, cùng các ví dụ minh họa cụ thể trên chuỗi và danh sách. Hy vọng bài viết này đã giúp bạn hiểu rõ hơn về cách thức hoạt động của chúng, đặc biệt là khi so sánh ID của các đối tượng.

Mọi người cũng đọc

Cao Lê Viết Tiến

PHP Leader
tại
Vietnix

Kết nối với mình qua

Icon Quote
Icon Quote

Học lập trình online cùng vietnix

Học lập trình online cùng Vietnix

PHPXem thêmThu gọn