Python - Object Internals

internals of Python objects cung cấp cái nhìn sâu sắc hơn về cách Python quản lý và thao tác dữ liệu. Kiến thức này rất cần thiết để viết mã hiệu quả, tối ưu và để gỡ lỗi hiệu quả.

Dù chúng ta đang xử lý các đối tượng không thay đổi (immutable) hay có thể thay đổi (mutable) bằng cách quản lý bộ nhớ thông qua việc đếm tham chiếu và thu gom rác, hoặc tận dụng các phương thức đặc biệt và slots, việc nắm vững những khái niệm này là điều cơ bản để thành thạo lập trình Python.

Hiểu Python's object internals là rất quan trọng để tối ưu hóa mã và gỡ lỗi. Dưới đây là tổng quan về các khía cạnh chính của nội bộ đối tượng Python −

Object Structure

Trong Python, mọi đối tượng là một cấu trúc dữ liệu phức tạp bao gồm nhiều thông tin khác nhau. Hiểu cấu trúc đối tượng giúp các nhà phát triển nắm bắt cách Python quản lý bộ nhớ và xử lý dữ liệu.

Mỗi đối tượng Python chủ yếu bao gồm hai phần như đã đề cập dưới đây −

  • Object Header: This is a crucial part of every Python object that contains essential information for the Python interpreter to manage the object effectively. It typically consists of two main components namely Reference count and Type Pointer .
  • Object Data: This data is the actual data contained within the object which can differ based on the object's type. For example an integer contains its numeric value while a list contains references to its elements.

Object Identity

Object Identity là danh tính của một đối tượng, là một số nguyên duy nhất đại diện cho địa chỉ bộ nhớ của nó. Nó giữ nguyên trong suốt vòng đời của đối tượng. Mỗi đối tượng trong Python đều có một danh tính duy nhất được lấy bằng cách sử dụng hàm id() .

Example

Dưới đây là mã ví dụ về việc lấy Danh tính Đối tượng −

a = "Tutorialspoint"
print(id(a))  # Example of getting the id of an string object

Khi thực thi đoạn mã trên, chúng ta sẽ nhận được đầu ra sau:

2366993878000

Note: Địa chỉ bộ nhớ sẽ thay đổi mỗi lần thực thi đoạn mã.

Object Type

Object Type là loại của một đối tượng xác định các thao tác có thể được thực hiện trên nó. Ví dụ, số nguyên, chuỗi và danh sách có các loại khác nhau. Nó được định nghĩa bởi lớp của nó và có thể được truy cập bằng cách sử dụng hàm type() .

Example

Dưới đây là ví dụ về nó −

a = "Tutorialspoint"
print(type(a)) 

Khi thực thi đoạn mã trên, chúng ta sẽ nhận được output

<class 'str'>

Object Value

Object Value của một đối tượng là dữ liệu thực tế mà nó chứa. Điều này có thể là một giá trị nguyên thủy như số nguyên hoặc chuỗi, hoặc nó có thể là các cấu trúc dữ liệu phức tạp hơn như lists hoặc dictionaries .

Example

Dưới đây là ví dụ về giá trị đối tượng −

b = "Welcome to Tutorialspoint"
print(b)  

Khi thực thi đoạn mã trên, chúng ta sẽ nhận được output

Welcome to Tutorialspoint

Memory Management

Memory management trong Python là một khía cạnh quan trọng trong thiết kế của ngôn ngữ này, đảm bảo sử dụng hiệu quả tài nguyên trong khi xử lý vòng đời đối tượng và thu gom rác. Dưới đây là các thành phần chính của quản lý bộ nhớ trong Python −

  • Reference Counting: Python uses reference counting to manage memory. Each object keeps track of how many references point to it. When this count drops to zero then the memory can be freed.
  • Garbage Collection: In addition to reference counting the Python employs a garbage collector to identify and clean up reference cycles.

Example

Dưới đây là ví dụ về việc lấy thông tin đếm tham chiếu trong quản lý bộ nhớ −

import sys
c = [1, 2, 3]
print(sys.getrefcount(c))  # Shows the reference count

Khi thực thi đoạn mã trên, chúng ta sẽ nhận được output

2

Attributes and Methods

Các đối tượng Python có attributes methods được truy cập bằng cách sử dụng cú pháp dấu chấm. Trong đó, Attributes lưu trữ dữ liệu trong khi methods định nghĩa hành vi.

Example

class MyClass:
   def __init__(self, value):
      self.value = value

   def display(self):
      print(self.value)

obj = MyClass(10)
obj.display() 

Khi thực thi đoạn mã trên, chúng ta sẽ nhận được output

10

Cuối cùng, việc hiểu rõ nội bộ của đối tượng trong Python giúp tối ưu hiệu suất và gỡ lỗi hiệu quả. Bằng cách nắm bắt cách mà các đối tượng được cấu trúc và quản lý trong bộ nhớ, các nhà phát triển có thể đưa ra những quyết định sáng suốt khi viết mã Python.