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ứ
- loại đối tượng
- Giá trị đối tượng
- Bộ đếm tham chiếu đối tượng
Bảng bộ nhớ cho "case2"
loại hình | int |
giá trị | 100 |
Số lượng tham chiếu | 2 |
người giới thiệu | a, 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.
0Mộ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.