CÔNG CỤ
MODULES
THAM KHẢO
CÁC CHỦ ĐỀ
BÀI MỚI NHẤT
MỚI CẬP NHẬT

Thông báo: Download 4 khóa học Python từ cơ bản đến nâng cao tại đây.

Mutable and Immutable trong Python

Trong bài viết này, bạn sẽ tìm hiểu về khái niệm đánh máy động (dynamic typing) trong Python và cách nó hoạt động. Việc hiểu rõ về đánh máy động sẽ giúp bạn linh hoạt hơn khi lập trình, bởi Python cho phép thay đổi kiểu dữ liệu của biến một cách linh hoạt mà không cần khai báo trước. Điều này khác biệt so với nhiều ngôn ngữ lập trình có kiểu tĩnh, nơi mà kiểu dữ liệu của biến phải được xác định rõ ràng từ khi khai báo. Hãy cùng tìm hiểu cách Python quản lý kiểu dữ liệu của các biến và những ưu điểm mà đánh máy động mang lại.

test php

banquyen png
Bài viết này được đăng tại freetuts.net, không được copy dưới mọi hình thức.

Giới thiệu về đối tượng mutable và immutable trong Python

Trong Python, mọi thứ đều là đối tượng. Một đối tượng có trạng thái nội tại riêng của nó. Một số đối tượng cho phép bạn thay đổi trạng thái nội tại này, trong khi số khác thì không.

  • Đối tượng có thể thay đổi là các đối tượng mà trạng thái nội tại của nó có thể thay đổi.
  • Đối tượng không thể thay đổi là các đối tượng mà trạng thái nội tại của nó không thể thay đổi.

Ví dụ về đối tượng không thể thay đổi:

  • Số (int, float, bool,…)
  • Chuỗi (string)
  • Bộ giá trị (tuple)
  • Tập đóng băng (frozen set)

Ví dụ về đối tượng có thể thay đổi:

  • Danh sách (list)
  • Tập hợp (set)
  • Từ điển (dictionary)
  • Các lớp do người dùng định nghĩa có thể thay đổi hoặc không thể thay đổi, tùy thuộc vào trạng thái nội tại của chúng có thể thay đổi hay không.

Ví dụ về đối tượng immutable trong Python

Khi bạn khai báo một biến và gán cho nó một giá trị số nguyên, Python sẽ tạo ra một đối tượng số nguyên mới và gán biến đó để tham chiếu đến đối tượng này:

counter = 100

Để lấy địa chỉ bộ nhớ mà biến tham chiếu đến, bạn có thể sử dụng hàm id(). Hàm id() trả về một số nguyên hệ cơ số 10:

Bài viết này được đăng tại [free tuts .net]

print(id(counter))

Đầu ra:

140717671523072

Để chuyển đổi số hệ cơ số 10 này sang hệ thập lục phân, bạn có thể sử dụng hàm hex():

print(hex(id(100)))

Đầu ra:

0x7ffb62d32300

Trong bộ nhớ, bạn có một biến tên là counter tham chiếu đến một đối tượng số nguyên nằm tại địa chỉ 0x7ffb62d32300:

Python Immutable Example 1 png

Khi bạn thay đổi giá trị của counter thành 200 và hiển thị giá trị của nó lên màn hình:

counter = 200
print(counter)

Đầu ra:

200

Có vẻ như giá trị của đối tượng được tham chiếu bởi biến counter đã thay đổi, nhưng thực ra không phải vậy. Python tạo ra một đối tượng số nguyên mới với giá trị 200 và gán lại biến counter để nó tham chiếu đến đối tượng mới này:

Python Immutable Example 2 png

Việc gán lại này không làm thay đổi giá trị của đối tượng số nguyên đầu tiên. Nó chỉ gán lại tham chiếu.

Ví dụ về đối tượng mutable trong Python

Dưới đây là ví dụ về một danh sách các số và hiển thị địa chỉ bộ nhớ của danh sách:

ratings = [1, 2, 3]
print(hex(id(ratings)))  # 0x1840f97a340

Khi bạn thêm một số vào danh sách:

Python Mutable Example png

ratings.append(4)

Python sẽ thay đổi trực tiếp giá trị của đối tượng danh sách:

Python Mutable Example 2 png

Python Mutable Example

Và Python không tạo ra đối tượng mới như ví dụ về đối tượng không thể thay đổi ở trên.

Ví dụ về đối tượng mutable và immutable trong Python

Điều quan trọng cần hiểu là đối tượng không thể thay đổi không phải là thứ cố định hay hoàn toàn không thay đổi. Hãy xem xét ví dụ sau:

Dưới đây định nghĩa một tuple chứa hai danh sách:

low = [1, 2, 3]
high = [4, 5]

rankings = (low, high)

rankings là một tuple nên nó không thể thay đổi. Bạn không thể thêm hoặc xóa phần tử từ nó.

Python mutable immutable png

Tuy nhiên, rankings chứa hai danh sách là các đối tượng có thể thay đổi. Do đó, bạn có thể thêm một phần tử mới vào danh sách high mà không gặp vấn đề gì:

high.append(6)
print(rankings)

rankings thay đổi thành:

Python mutable immutable 2 png

([1, 2, 3], [4, 5, 6])

Kết bài

Hiểu rõ sự khác biệt giữa các đối tượng mutable và immutable trong Python không chỉ giúp bạn viết mã hiệu quả hơn mà còn tránh được nhiều lỗi tiềm ẩn trong quá trình lập trình. Các đối tượng immutable như số nguyên, chuỗi và tuple mang lại sự an toàn và ổn định, vì chúng không thể thay đổi sau khi được khởi tạo. Ngược lại, các đối tượng mutable như danh sách, tập hợp và từ điển mang lại sự linh hoạt trong việc thay đổi và quản lý dữ liệu. Nắm vững khái niệm này sẽ giúp bạn áp dụng chúng một cách đúng đắn và tối ưu trong các dự án của mình.

Cùng chuyên mục:

Tìm hiểu Backreferences trong regex của Python

Tìm hiểu Backreferences trong regex của Python

Nhóm Non-capturing trong Regex Python

Nhóm Non-capturing trong Regex Python

Các nhóm Capturing trong regex của Python

Các nhóm Capturing trong regex của Python

Sets và Ranges trong Regex của Python

Sets và Ranges trong Regex của Python

Lượng từ non-greed trong Regex của Python

Lượng từ non-greed trong Regex của Python

Chế độ Greedy trong Regex Python

Chế độ Greedy trong Regex Python

Các lượng từ trong Regex của Python

Các lượng từ trong Regex của Python

Regex Word Boundary trong Python

Regex Word Boundary trong Python

Regex với các ký tự neo trong Python

Regex với các ký tự neo trong Python

Các tập ký tự trong Regex của Python

Các tập ký tự trong Regex của Python

Biểu thức chính quy (Regex) trong Python

Biểu thức chính quy (Regex) trong Python

Tìm hiểu Context Managers trong Python

Tìm hiểu Context Managers trong Python

Biểu thức Generator trong Python

Biểu thức Generator trong Python

Tìm hiểu Generators trong Python

Tìm hiểu Generators trong Python

Sử dụng hiệu quả hàm iter() trong Python

Sử dụng hiệu quả hàm iter() trong Python

Iterator vs Iterable trong Python

Iterator vs Iterable trong Python

Tìm hiểu về Iterator trong Python

Tìm hiểu về Iterator trong Python

Dãy số Fibonacci trong Python

Dãy số Fibonacci trong Python

Cắt Chuỗi (Slicing) trong Python

Cắt Chuỗi (Slicing) trong Python

Sự khác biệt giữa Tuple và List trong Python

Sự khác biệt giữa Tuple và List trong Python

Top