Hướng dẫn how do you find the memory address of an object in python? - làm thế nào để bạn tìm thấy địa chỉ bộ nhớ của một đối tượng trong python?

Xem thảo luận

Cải thiện bài viết

Lưu bài viết

  • Đọc
  • Bàn luận
  • Xem thảo luận

    Cải thiện bài viết

    Lưu bài viết

    Đọc

    Bàn luận

    Trong Python, mọi thứ đều là một đối tượng, từ các biến đến danh sách và từ điển, mọi thứ đều được coi là đối tượng. & NBSP; Trong bài viết này, chúng ta sẽ lấy địa chỉ bộ nhớ của một đối tượng trong Python. & NBSP;

    Syntax:

    id[object]

    Phương pháp 1: Sử dụng ID []

    Chúng ta có thể nhận được một địa chỉ bằng hàm id []. Hàm id [] cung cấp địa chỉ của đối tượng cụ thể.Python program to get the address of different objects

    Python3

    trong đó đối tượng là các biến dữ liệu.

    a 4a 5a 6a 7

    Ví dụ: Chương trình Python để có được địa chỉ của các đối tượng khác nhau

    a 4a 5a 6a 7

    a = [1, ____________, 3____5____5____10____5____a 2

    a 4a 5a 6a 7

    a = =0

    a 4a 5a 6a 7

    Output:

    140234866534752

    94264748411744

    140234904267376

    140234866093264

    a = a 51, ____________, 3____5____5____10____5__12

    a = 1415161, ____4916____________, 2

    Syntax:

    addressof[c_int[object]]

    Phương pháp 2: Sử dụng các mô -đun C_int, Địa chỉ

    CTYPES là một thư viện chức năng nước ngoài cho Python. Nó cung cấp các loại dữ liệu tương thích C và cho phép gọi các chức năng trong DLL hoặc thư viện được chia sẻ. Python program to get the memory address of  a variable

    Python3

    trong đó đối tượng là các biến dữ liệu

    Ví dụ: Chương trình Python để lấy địa chỉ bộ nhớ của & nbsp; một biến

    a 425

    Output:

    140234866278064

    , 7 , 8, 9 20

    Syntax:

    hex[id[object]]

    where,

    • a = 23
    • Cũng có thể nhận được địa chỉ bộ nhớ ở định dạng thập lục phân. Ở đây chúng tôi sẽ gọi hàm HEX [địa chỉ], để chuyển đổi địa chỉ bộ nhớ thành đại diện thập lục phân.
    • hex [] là đại diện thập lục phân của bộ nhớ đến địa chỉ

    ID được sử dụng để có được bộ nhớ của đối tượng Python program to get the memory address in hexadecimal representation.

    Python3

    trong đó đối tượng là các biến dữ liệu.

    a 4a 531a 5a 634

    Ví dụ: Chương trình Python để có được địa chỉ của các đối tượng khác nhau

    a 4a 531a 5a 634

    a = [1, ____________, 3____5____5____10____5____a 2

    a 4a 531a 5a 634

    a = =0

    a 4a 531a 5a 634

    Output:

    0x7fba9b0ae8c0

    0x5572da858b60

    0x7fba9f3c4a10

    0x7fba9b05b8c0


    Có một vài vấn đề ở đây không được đề cập bởi bất kỳ câu trả lời nào khác.

    Đầu tiên, a 6 chỉ trả về:

    Bản sắc của người Viking của một đối tượng. Đây là một số nguyên [hoặc số nguyên dài] được đảm bảo là duy nhất và không đổi cho đối tượng này trong suốt vòng đời của nó. Hai đối tượng có tuổi thọ không chồng chéo có thể có cùng giá trị a 31.

    Trong Cpython, điều này xảy ra là con trỏ tới a 32 đại diện cho đối tượng trong trình thông dịch, đó là điều tương tự mà a 33 hiển thị. Nhưng đây chỉ là một chi tiết thực hiện của Cpython, không phải là điều đúng với Python nói chung. Jython không giao dịch trong các gợi ý, nó liên quan đến các tài liệu tham khảo của Java [điều mà JVM tất nhiên có thể đại diện là con trỏ, nhưng bạn không thể nhìn thấy những người đó và không muốn, vì GC được phép di chuyển chúng xung quanh]. PYPY cho phép các loại khác nhau có các loại a 6 khác nhau, nhưng tổng quát nhất chỉ là một chỉ mục vào một bảng các đối tượng bạn gọi là a 6 trên, rõ ràng sẽ không phải là một con trỏ. Tôi không chắc chắn về Ironpython, nhưng tôi nghi ngờ nó giống Jython hơn là Cpython về vấn đề này. Vì vậy, trong hầu hết các triển khai Python, không có cách nào để có được bất cứ điều gì xuất hiện trong a 36 đó và không có ích gì nếu bạn đã làm.

    Nhưng nếu bạn chỉ quan tâm đến Cpython thì sao? Đó là một trường hợp khá phổ biến, sau tất cả.

    Chà, trước tiên, bạn có thể nhận thấy rằng a 6 là một số nguyên;* Nếu bạn muốn chuỗi a 38 đó thay vì số a 39, bạn sẽ phải tự định dạng. Theo bìa, tôi tin rằng a 33 cuối cùng đang sử dụng định dạng a 42 của ____ 141, mà bạn không có từ Python, nhưng bạn luôn có thể làm điều này:

    format[id[spam], '#010x' if sys.maxsize.bit_length[] 

    Bài Viết Liên Quan

    Chủ Đề