Hướng dẫn memory allocation for data types in python - cấp phát bộ nhớ cho các kiểu dữ liệu trong python

Hướng dẫn memory allocation for data types in python - cấp phát bộ nhớ cho các kiểu dữ liệu trong python

Trong Python, mọi thứ được coi là một đối tượng. Trong Python, chúng tôi không có biến thay vì Python có tên. Khi chúng tôi khai báo một tên/biến trong Python, nó sẽ lưu trữ tên trong bộ nhớ. Mỗi tên Python/biến chỉ vào tham chiếu của nó trong bộ nhớ và các điểm tham chiếu đến đối tượng.reference in the memory and reference points to the object.

Hãy xem xét mã ví dụ "a = 100", "A" là tên và nó chỉ vào tham chiếu "31365024" và các điểm tham chiếu đến đối tượng "100" ở định dạng nhị phân. Một tên chỉ là một nhãn cho một đối tượng. Trong Python, mỗi đối tượng có thể có rất nhiều tên.

Python có bộ nhớ ngăn xếp và bộ nhớ heap. Stack bộ nhớ lưu trữ trạng thái của chương trình. Bộ nhớ heap riêng lưu trữ các đối tượng và cấu trúc dữ liệu. Trình quản lý bộ nhớ Python sẽ chăm sóc việc phân bổ bộ nhớ heap riêng cho tên/biến. Trình quản lý Python sử dụng khái niệm được gọi là đếm tham chiếu, bất cứ khi nào một đối tượng mới được tạo, nó sẽ cập nhật số lượng tham chiếu của đối tượng.

trường hợp 1

CASE2

Hãy xem xét các mã trên.

Trong Trình quản lý bộ nhớ Python "Case1" sẽ tạo hai đối tượng. "A" chỉ vào đối tượng "100" và "B" trỏ đến đối tượng "200". Số lượng tham chiếu của đối tượng "100" là 1 và số lượng tham chiếu của đối tượng "200" là 1.python memory manager will create the two objects. "a" points to the object "100" and "b" points to the object "200". The reference count of the object "100" is 1 and the reference count of the object "200" is 1.

Trong "Case2" Trình quản lý bộ nhớ Python chỉ tạo một đối tượng i.e "100" và số lượng tham chiếu là "2". Bất cứ khi nào một đối tượng mới được tạo Pyhon Manager sẽ kiểm tra bộ nhớ cho đối tượng. Nếu đối tượng đã tồn tại Trình quản lý Python sẽ không tạo đối tượng mới thay vì nó tham chiếu tên vào đối tượng và tăng bộ đếm tham chiếu của đối tượng.python memory manager creates only one object i.e "100" and reference count is "2". Whenever a new object is created pyhon manager will checks the memory for the object. If object already exists python manager will not create new object instead it references the name to the object and increases the reference counter of the object.

Mỗi đối tượng Python đều giữ ba thứ

  1. loại đối tượng
  2. Giá trị đối tượng
  3. Bộ đếm tham chiếu đối tượng

Bảng bộ nhớ cho "case2"

loại hìnhint
giá trị100
Số lượng tham chiếu2
người giới thiệua, b

Chúng ta có thể có được vị trí bộ nhớ đối tượng với chức năng tích hợp Python "ID"

a = 100
print(id(a))
# 10914336
b = 100
print(id(b))
# 10914336
print(id(a) == id(b))
# True

Hãy thử mã trên trong trình thông dịch Python để xác nhận bản thân.

Bộ sưu tập rác trong Python

Bộ sưu tập rác là quá trình loại bỏ các biến/tên không sử dụng và giải phóng bộ nhớ.

Trong bộ sưu tập rác Python được thực hiện dựa trên cơ chế đếm tham chiếu. Bất cứ khi nào đối tượng được tạo, Python sẽ tăng số lượng tham chiếu của đối tượng lên một. Bất cứ khi nào tham chiếu được xóa thì nó sẽ giảm số lượng tham chiếu. Bộ thu gom rác định kỳ kiểm tra và loại bỏ các đối tượng khỏi bộ nhớ có số lượng tham chiếu bằng không.

a = 100
b = 100
# reference count of object 100 is 2
del a
# reference count of object 100 is 1
del b
# reference count of object 100 is 0
# So, garbage collector will remove the object 100 from the memory.

Đối với trường hợp

a = 100
b = 100
# reference count of object 100 is 2
del a
# reference count of object 100 is 1
del b
# reference count of object 100 is 0
# So, garbage collector will remove the object 100 from the memory.
1, hãy khám phá số lượng lưu trữ mà mỗi loại dữ liệu cơ bản tiêu thụ,

Đầu tiên, hãy xác định chức năng trợ giúp

a = 100
b = 100
# reference count of object 100 is 2
del a
# reference count of object 100 is 1
del b
# reference count of object 100 is 0
# So, garbage collector will remove the object 100 from the memory.
2 sẽ giúp chúng tôi khám phá,

import sys
def sizeof(x):
    print(x.__class__, sys.getsizeof(x), x)

Chạy này với Python 3.6.1 64 bit, đây là kết quả:

>>> sizeof(None)
 16 None

a = 100
b = 100
# reference count of object 100 is 2
del a
# reference count of object 100 is 1
del b
# reference count of object 100 is 0
# So, garbage collector will remove the object 100 from the memory.
3 mất 16 byte. Tiếp theo hãy khám phá các số nguyên,

>>> sizeof(10)
 28 10
>>> sizeof(2**64)
 36 18446744073709551616
>>> sizeof(2**128)
 44 340282366920938463463374607431768211456

Các số nguyên trong Python là độ chính xác tùy ý và ở trên thể hiện đúng hành vi, kích thước phát triển tuyến tính trong logarit của số nguyên được biểu thị.

>>> sizeof(0.0)
 24 0.0
>>> sizeof(10.0**100)
 24 1e+100
>>> sizeof(10.0**308)
 24 1e+308

Phao trong Python dường như có kích thước không đổi (24 byte)!

>>> sizeof("")
 49 
>>> sizeof("A")
 50 A
>>> sizeof("AB")
 51 AB
>>> sizeof("ABC")
 52 ABC

Một

a = 100
b = 100
# reference count of object 100 is 2
del a
# reference count of object 100 is 1
del b
# reference count of object 100 is 0
# So, garbage collector will remove the object 100 from the memory.
4 trống là 49 byte, nó phát triển tuyến tính với chiều dài của chuỗi.

Tiếp theo, hãy khám phá danh sách, dicts, bộ dữ liệu & bộ,

>>> sizeof([])
 64 []
>>> sizeof([1,2,3,4,5,6,7,8,9,10])
 144 [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

Một

a = 100
b = 100
# reference count of object 100 is 2
del a
# reference count of object 100 is 1
del b
# reference count of object 100 is 0
# So, garbage collector will remove the object 100 from the memory.
5 trống chiếm 64 byte, nó phát triển với số lượng các yếu tố.

>>> sizeof(())
 48 ()
>>> sizeof((1,))
 56 (1,)
>>> sizeof((1,2,3,4,5,6,7,8,9,10,))
 128 (1, 2, 3, 4, 5, 6, 7, 8, 9, 10)

Một

a = 100
b = 100
# reference count of object 100 is 2
del a
# reference count of object 100 is 1
del b
# reference count of object 100 is 0
# So, garbage collector will remove the object 100 from the memory.
6 trống chiếm 48 byte, nó phát triển với số lượng các yếu tố.

>>> sizeof({})
 240 {}
>>> sizeof({"a" : 1})
 240 {'a': 1}
>>> a = {}
>>> for i in range(20): 
...     a[i] = i**2
... 
>>> sizeof(a)
 648 {0: 0, 1: 1, 2: 4, 3: 9, 4: 16, 5: 25, 6: 36, 7: 49, 8: 64, 9: 81, 10: 100, 11: 121, 12: 144, 13: 169, 14: 196, 15: 225, 16: 256, 17: 289, 18: 324, 19: 361}

Một

a = 100
b = 100
# reference count of object 100 is 2
del a
# reference count of object 100 is 1
del b
# reference count of object 100 is 0
# So, garbage collector will remove the object 100 from the memory.
7 trống chiếm 240 byte, nó phát triển với số lượng các yếu tố.

a = 100
b = 100
# reference count of object 100 is 2
del a
# reference count of object 100 is 1
del b
# reference count of object 100 is 0
# So, garbage collector will remove the object 100 from the memory.
0

Một

a = 100
b = 100
# reference count of object 100 is 2
del a
# reference count of object 100 is 1
del b
# reference count of object 100 is 0
# So, garbage collector will remove the object 100 from the memory.
8 trống chiếm 224 byte, nó phát triển với số lượng các yếu tố.

Điều này kết thúc cuộc thăm dò ngắn gọn của tôi về mức tiêu thụ bộ nhớ của các loại dữ liệu khác nhau trong

a = 100
b = 100
# reference count of object 100 is 2
del a
# reference count of object 100 is 1
del b
# reference count of object 100 is 0
# So, garbage collector will remove the object 100 from the memory.
9. Quản lý bộ nhớ trong Python rất dễ dàng nếu bạn không quan tâm nhưng điều đó chứng tỏ là thách thức khi bạn mở rộng quy mô!

Bạn đọc thêm về quản lý bộ nhớ trong Python trong các tài liệu Theano ở đây.

Làm thế nào các loại dữ liệu được lưu trữ trong bộ nhớ trong Python?

Phân bổ bộ nhớ trong Python Các phương thức/các cuộc gọi phương thức và các tham chiếu được lưu trữ trong bộ nhớ ngăn xếp và tất cả các đối tượng giá trị được lưu trữ trong một đống riêng tư.The methods/method calls and the references are stored in stack memory and all the values objects are stored in a private heap.

Bao nhiêu bộ nhớ được phân bổ cho kiểu dữ liệu int trong Python?

Floats và INT trong Python mặc định sử dụng 8 byte, quá nhiều đối với hầu hết các trường hợp.Chỉ thay đổi thành biến thể 4 byte bị cắt giảm 50% khi sử dụng bộ nhớ.INT có thể nhỏ như 1 byte, chỉ sử dụng bộ nhớ 12,5%.8 bytes, which is too much for most cases. Merely changing to a 4 bytes variant is a 50% cut on memory use. Ints can be as small as 1 byte, using only 12.5% percent as much memory.

Làm cách nào để phân bổ bộ nhớ trong Python?

Bộ nhớ rõ trong Python Sử dụng phương thức DEL Statement Collection (), câu lệnh DEL có thể khá hữu ích để xóa bộ nhớ trong quá trình thực thi chương trình của Python.Câu lệnh DEL được sử dụng để xóa biến trong Python.Using the del Statement collect() method, the del statement can be quite useful to clear memory during Python's program execution. The del statement is used to delete the variable in Python.

Bộ nhớ được phân bổ cho một danh sách trong Python như thế nào?

Python giữ một con trỏ đến mảng này và độ dài của mảng được lưu trữ trong cấu trúc đầu danh sách.Điều này làm cho việc lập chỉ mục của một danh sách độc lập với kích thước của danh sách hoặc giá trị của chỉ mục.Khi các mục được nối hoặc chèn, mảng tài liệu tham khảo được thay đổi kích thước.. This makes indexing of a list independent of the size of the list or the value of the index. When items are appended or inserted the array of references is resized.