Hướng dẫn python object memory size - Kích thước bộ nhớ đối tượng python

Làm thế nào bạn có thể tìm ra bao nhiêu bộ nhớ đang được sử dụng bởi một đối tượng? Tôi biết có thể tìm hiểu bao nhiêu được sử dụng bởi một khối mã, nhưng không phải bởi một đối tượng khởi tạo [bất cứ lúc nào trong suốt cuộc đời của nó], đó là những gì tôi muốn.

Nội dung chính

  • Làm thế nào để bạn kiểm tra kích thước bộ nhớ của một đối tượng trong Python?
  • __ sizeof __ trong Python là gì?
  • Làm thế nào để bạn tìm thấy địa chỉ bộ nhớ của một đối tượng trong Python?
  • Một lớp học chiếm bao nhiêu bộ nhớ trong Python?

Abe Trung thực

8.1024 Huy hiệu vàng47 Huy hiệu bạc62 Huy hiệu Đồng4 gold badges47 silver badges62 bronze badges4 gold badges47 silver badges62 bronze badges

Khi được hỏi ngày 29 tháng 8 năm 2008 lúc 4:59Aug 29, 2008 at 4:59Aug 29, 2008 at 4:59

5

Thử cái này:

sys.getsizeof[object]

getSizeof [] Trả về kích thước của một đối tượng trong byte. Nó gọi phương thức đối tượng ____ ____ và thêm một trình thu gom rác bổ sung nếu đối tượng được quản lý bởi người thu gom rác.if the object is managed by the garbage collector.if the object is managed by the garbage collector.

Một công thức đệ quy

Stefan

7652 Huy hiệu vàng8 Huy hiệu bạc23 Huy hiệu đồng2 gold badges8 silver badges23 bronze badges2 gold badges8 silver badges23 bronze badges

Đã trả lời ngày 8 tháng 11 năm 2013 lúc 18:11Nov 8, 2013 at 18:11Nov 8, 2013 at 18:11

UzeruzerUzerUzer

2.8541 Huy hiệu vàng16 Huy hiệu bạc23 Huy hiệu đồng1 gold badge16 silver badges23 bronze badges1 gold badge16 silver badges23 bronze badges

7

Không có cách nào dễ dàng để tìm ra kích thước bộ nhớ của một đối tượng Python. Một trong những vấn đề bạn có thể tìm thấy là các đối tượng Python - như danh sách và dicts - có thể có các tham chiếu đến các đối tượng Python khác [trong trường hợp này, kích thước của bạn sẽ là bao nhiêu? Kích thước chứa kích thước của mỗi đối tượng hay không?]. Có một số con trỏ trên cao và cấu trúc nội bộ liên quan đến các loại đối tượng và bộ sưu tập rác. Cuối cùng, một số đối tượng Python có những hành vi không rõ ràng. Chẳng hạn, liệt kê không gian dự trữ cho nhiều đối tượng hơn chúng, hầu hết thời gian; Dicts thậm chí còn phức tạp hơn vì chúng có thể hoạt động theo những cách khác nhau [chúng có một triển khai khác nhau cho số lượng nhỏ các khóa và đôi khi chúng qua các mục nhập].. One of the problems you may find is that Python objects - like lists and dicts - may have references to other python objects [in this case, what would your size be? The size containing the size of each object or not?]. There are some pointers overhead and internal structures related to object types and garbage collection. Finally, some python objects have non-obvious behaviors. For instance, lists reserve space for more objects than they have, most of the time; dicts are even more complicated since they can operate in different ways [they have a different implementation for small number of keys and sometimes they over allocate entries].. One of the problems you may find is that Python objects - like lists and dicts - may have references to other python objects [in this case, what would your size be? The size containing the size of each object or not?]. There are some pointers overhead and internal structures related to object types and garbage collection. Finally, some python objects have non-obvious behaviors. For instance, lists reserve space for more objects than they have, most of the time; dicts are even more complicated since they can operate in different ways [they have a different implementation for small number of keys and sometimes they over allocate entries].

Có một đoạn mã lớn [và một đoạn mã lớn được cập nhật] ngoài kia để cố gắng gần đúng với kích thước của một đối tượng Python trong bộ nhớ.

Bạn cũng có thể muốn kiểm tra một số mô tả cũ về PyObject [cấu trúc C bên trong đại diện cho hầu như tất cả các đối tượng Python].

Rob ♦♦

26.7K15 Huy hiệu vàng81 Huy hiệu bạc94 Huy hiệu đồng15 gold badges81 silver badges94 bronze badges15 gold badges81 silver badges94 bronze badges

Đã trả lời ngày 30 tháng 8 năm 2008 lúc 3:25Aug 30, 2008 at 3:25Aug 30, 2008 at 3:25

fserbfserbfserbfserb

3,8472 Huy hiệu vàng25 Huy hiệu bạc22 Huy hiệu đồng2 gold badges25 silver badges22 bronze badges2 gold badges25 silver badges22 bronze badges

3

Tôi không có bất kỳ kinh nghiệm cá nhân nào với một trong những điều sau đây, nhưng một tìm kiếm đơn giản cho một trình soạn thảo "python [bộ nhớ]":

  • Pysizer, "Một bộ nhớ hồ sơ cho Python," được tìm thấy tại //pysizer.8325.org/. Tuy nhiên, trang dường như chỉ ra rằng dự án đã không được cập nhật trong một thời gian và đề cập đến ...

  • Heapy, "Hỗ trợ [ing] gỡ lỗi và tối ưu hóa về các vấn đề liên quan đến bộ nhớ trong các chương trình Python", được tìm thấy tại //guppy-pe.sourceforge.net/#heapy.

Hy vọng điều đó sẽ giúp.

Đã trả lời ngày 29 tháng 8 năm 2008 lúc 5:33Aug 29, 2008 at 5:33Aug 29, 2008 at 5:33

jcsalteregojcsalteregojcsalteregojcsalterego

4442 Huy hiệu bạc2 Huy hiệu đồng2 silver badges2 bronze badges2 silver badges2 bronze badges

1

Điều này phải được sử dụng một cách cẩn thận vì ghi đè trên các đối tượng __sizeof__ có thể gây hiểu lầm.

Sử dụng bregman.suite, một số thử nghiệm với sys.getsizeOf đầu ra một bản sao của một đối tượng mảng [dữ liệu] trong một thể hiện đối tượng lớn hơn chính đối tượng [MFCC].

>>> mfcc = MelFrequencyCepstrum[filepath, params]
>>> data = mfcc.X[:]
>>> sys.getsizeof[mfcc]
64
>>> sys.getsizeof[mfcc.X]
>>>80
>>> sys.getsizeof[data]
80
>>> mfcc

Đã trả lời ngày 3 tháng 1 năm 2014 lúc 14:54Jan 3, 2014 at 14:54Jan 3, 2014 at 14:54

Rafaelvallerafaelvallerafaelvallerafaelvalle

6.3733 Huy hiệu vàng33 Huy hiệu bạc34 Huy hiệu đồng3 gold badges33 silver badges34 bronze badges3 gold badges33 silver badges34 bronze badges

Đối với các đối tượng lớn, bạn có thể sử dụng một phương pháp hơi thô nhưng hiệu quả: kiểm tra xem quá trình Python của bạn chiếm bao nhiêu bộ nhớ trong hệ thống, sau đó xóa đối tượng và so sánh.

Phương pháp này có nhiều nhược điểm nhưng nó sẽ cho bạn ước tính rất nhanh cho các đối tượng rất lớn.

Đã trả lời ngày 30 tháng 6 năm 2014 lúc 16:44Jun 30, 2014 at 16:44Jun 30, 2014 at 16:44

3

Làm thế nào để bạn kiểm tra kích thước bộ nhớ của một đối tượng trong Python?

Trong Python, việc sử dụng sys.getsizeOf [] có thể được thực hiện để tìm kích thước lưu trữ của một đối tượng cụ thể chiếm một số không gian trong bộ nhớ.Hàm này trả về kích thước của đối tượng trong byte.sys.getsizeof[] can be done to find the storage size of a particular object that occupies some space in the memory. This function returns the size of the object in bytes.sys. getsizeof[] can be done to find the storage size of a particular object that occupies some space in the memory. This function returns the size of the object in bytes.

__ sizeof __ trong Python là gì?

Phương thức Python __sizeof __ [] trả về kích thước của đối tượng trong byte.Các sys.phương thức getSizeof [] phương thức gọi nội bộ __sizeof __ [] và thêm một số chi phí byte bổ sung, ví dụ: để thu gom rác.returns the size of the object in bytes. The sys. getsizeof[] method internally call's __sizeof__[] and adds some additional byte overhead, e.g., for garbage collection.returns the size of the object in bytes. The sys. getsizeof[] method internally call's __sizeof__[] and adds some additional byte overhead, e.g., for garbage collection.

Làm thế nào để bạn tìm thấy địa chỉ bộ nhớ của một đối tượng trong Python?

Sử dụng ID [] để lấy địa chỉ bộ nhớ của ID cuộc gọi đối tượng [đối tượng] để lấy địa chỉ bộ nhớ của đối tượng.Gọi Hex [địa chỉ] để chuyển đổi địa chỉ bộ nhớ thành đại diện thập lục phân. Call id[object] to get the memory address of object . Call hex[address] to convert the memory address to hexadecimal representation. Call id[object] to get the memory address of object . Call hex[address] to convert the memory address to hexadecimal representation.

Một lớp học chiếm bao nhiêu bộ nhớ trong Python?

Một chuỗi có độ dài 7 mất 56 byte [49 chi phí + 7 byte cho mỗi ký tự].Một danh sách trống mất 56 byte [chỉ trên đầu].56 bytes [49 overhead + 7 bytes for each character]. An empty list takes 56 bytes [just overhead].56 bytes [49 overhead + 7 bytes for each character]. An empty list takes 56 bytes [just overhead].

Bài Viết Liên Quan

Chủ Đề