Kích thước bộ nhớ int của 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 theo byte. Phải mất nhiều nhất hai đối số i. e Bản thân đối tượng

Ghi chú. Chỉ tính mức tiêu thụ bộ nhớ được gán trực tiếp cho đối tượng, không phải mức tiêu thụ bộ nhớ của các đối tượng mà nó đề cập đến

ví dụ.   

Input: 
# Any Integer Value
sys.getsizeof(4) 

Expected Output: 4 bytes (Size of integer is 4bytes)
Actual Output: 28 bytes

Đây là cách chúng ta có thể giải thích đầu ra thực tế. Hãy nhìn vào bảng dưới đây.  

Loại đối tượngKích thước thựcGhi chúint28NAstr49+1 cho mỗi ký tự bổ sung (49+tổng độ dài ký tự)tuple40 (Bộ trống)+8 cho mỗi mục bổ sung trong một bộ ( 40 + 8*tổng độ dài ký tự )list56 (Danh sách trống)+8 cho mỗi mục bổ sung . 5-19 lấy cỡ 728. Ngày 20 sẽ lấy 2264, v.v.…dict2320-5 lấy kích thước 232. Kích thước 6-10 sẽ là 360. ngày 11 sẽ lấy 640, v.v...func def136Không có thuộc tính và đối số mặc định

Thí dụ

Python3




import sys

 

# Getting size using getsizeof() method and lately

# printing the same.

a__=

#Python
x = 42
y = 1.5
0____11
#Python
x = 42
y = 1.5
2

import0import1

 

import2=

#Python
x = 42
y = 1.5
0import5
#Python
x = 42
y = 1.5
2

import0import8

 

import9= sys1_______52sys3sys4sys3sys4sys3sys8sys3# Getting size using getsizeof() method and lately0# Getting size using getsizeof() method and lately1

import0# Getting size using getsizeof() method and lately3

 

# Getting size using getsizeof() method and lately4= # Getting size using getsizeof() method and lately6sys2sys3sys4sys3sys4sys3sys8sys3# Getting size using getsizeof() method and lately0# printing the same.6

import0# printing the same.8

 

# printing the same.9= a1____82sys3a4sys3a6sys3a8a9

import0____91

 

=2= a1a2=6=7sys3a4=6

#Python
x = 42
y = 1.5
01sys3a6=6
#Python
x = 42
y = 1.5
05sys3a8=6
#Python
x = 42
y = 1.5
09a9

Nếu bạn là một lập trình viên dày dạn kinh nghiệm thì cứ thoải mái chuyển thẳng sang phần có tên “Các loại số trong Python”, vì phần đầu tiên có thể sẽ không dạy cho bạn nhiều điều mới. Nếu không, chỉ cần tiếp tục đọc

Các loại rõ ràng và tiềm ẩn

Python là một ngôn ngữ siêu phổ biến và một trong những lý do cho điều này là bạn không phải suy nghĩ về các loại dữ liệu khác nhau khi viết mã bằng Python. Trong khi ở các ngôn ngữ như C, C# và Java, bạn phải chỉ định loại dữ liệu của một biến, thì trong Python, bạn có thể bỏ qua điều đó và chỉ cần nhập tên biến của mình và sau đó bạn có thể sử dụng.

Thời tiết mà bạn cho là tốt hay không thì tất nhiên là chủ quan. Một số nhà phát triển ghét các ngôn ngữ lập trình không được nhập chính xác, vì việc thiếu các loại sẽ làm tăng nguy cơ tạo mã dễ bị tổn thương và không thể đoán trước, nếu bạn không cẩn thận và nhận thức được những gì mình đang làm.

Mặt khác, một số nhà phát triển thực sự thích khả năng ghi và đọc mà Python mang lại, bởi vì cú pháp ít dài dòng hơn.

Trong bài đăng này, tôi muốn cung cấp cho bạn một số thông tin chi tiết hơn về cách các con số trong Python hoạt động và điều gì đang diễn ra bên trong Python

Hệ quả của các kiểu ẩn trong Python

Tôi nghĩ rằng một trong những hậu quả của Python khi không có các loại rõ ràng là rất nhiều người dùng mới, (bao gồm cả tôi cho đến gần đây), không thực sự nhận thức được điều gì đang xảy ra đằng sau những con số mà họ tạo bằng ngôn ngữ. Hãy xem một ví dụ

#Python
x = 42
y = 1.5

Trong khối mã trên, chúng tôi khởi tạo một số nguyên và một số dấu phẩy động (số có dấu thập phân)

Trong một ngôn ngữ như C, cùng một mã có thể trông như thế này

//C
int x = 42;
float y = 1.5;

Như bạn có thể thấy, trong C có sự khác biệt rõ ràng giữa hai biến và chúng ta phải xác định rằng số dấu phẩy động là số float và số nguyên là số nguyên

Còn nhiều điều nữa để tìm hiểu về các loại số trong C, nhưng tôi sẽ không đi sâu hơn vào vấn đề đó ngay bây giờ

Nếu Python là ngôn ngữ lập trình duy nhất mà bạn có kinh nghiệm, thì bạn có thể không suy nghĩ nhiều nếu có sự khác biệt lớn giữa số nguyên và số thập phân. Tuy nhiên, trong hầu hết các ngôn ngữ khác, đó thực sự là một vấn đề khá lớn

Vì vậy, thậm chí Python có int và float không?

Bạn cá là có

Các loại số trong Python

Nếu chúng ta sử dụng hàm a4 của Python, chúng ta có thể nhận được loại biến thực tế và trong ảnh chụp màn hình sau, bạn thấy hàm gọi ở bên trái và đầu ra trong thiết bị đầu cuối ở bên phải

Loại 42 và 1. 5 trong Python

Như bạn có thể thấy, loại x là ________ 85 và loại y là ________ 86. Vì vậy, Python thực sự có cả int và float, mặc dù nó không rõ ràng khi chỉ khởi tạo các số trong các biến

Kích thước của int và float

Bây giờ chúng ta hãy xem kích thước byte của các kiểu int và float trong C và Python

Lưu ý rằng kích thước chính xác của các loại dữ liệu khác nhau sẽ khác nhau tùy thuộc vào kiến ​​trúc CPU và trình biên dịch được sử dụng để biên dịch chương trình, tuy nhiên để giữ cho bài đăng này đơn giản và dễ theo dõi hơn, tôi sẽ sử dụng kích thước phù hợp với hệ thống của mình

Đây là một chương trình C nhỏ in ra kích thước int và float của chúng tôi

In kích thước của int và float trong C

Như bạn có thể thấy trong terminal bên phải khi chạy chương trình, cả hai kích thước đều là 4 byte, có nghĩa là chúng ta sử dụng 32 bit (8 * 4) để biểu diễn các số

Tiếp theo, làm điều tương tự trong Python, (hãy nhớ rằng x thực sự là một số nguyên và y là số float, như chúng ta đã khám phá trước đó)

In kích thước của int và float trong Python

28 byte cho int và 24 byte cho float. Điều đó có nghĩa là số 42 chiếm bộ nhớ gấp 7 lần trong Python so với trong C

Đây là một trong những lý do tại sao mã Python thường chậm hơn mã C và tại sao nó cần nhiều bộ nhớ hơn

Điều đó có làm cho Python trở thành một ngôn ngữ tồi không?

Không, nó không. Nó chỉ có nghĩa là Python có thể không phải là công cụ phù hợp cho mọi tình huống. Ví dụ: nếu mã của bạn cần chạy trên thiết bị có tài nguyên thấp thì C có thể là ngôn ngữ phù hợp hơn cho tác vụ

Tại sao int 42 yêu cầu 28 byte trong Python?

Trong phần còn lại của bài viết này, tôi sẽ chủ yếu tập trung vào int và để dành phần nói về số float cho một ngày khác

Lý do int 42 chiếm quá nhiều không gian trong Python là vì nó không chỉ là số. Như chúng ta đã thấy trước đó, loại biến x của chúng ta thực sự là a5. Điều này có nghĩa là chúng ta đang nói về toàn bộ đối tượng thay vì chỉ một số. Đối tượng int này có 4 thuộc tính trên đó và chính những thuộc tính này chiếm dung lượng

Bốn thuộc tính là

  • Tham chiếu hỗ trợ Python tìm vị trí bộ nhớ và thực hiện cấp phát và hủy cấp phát bộ nhớ cho int. Nó có loại a8
  • Một con trỏ tới loại đối tượng mà đối tượng này là, đó là một int. Kiểu dữ liệu là một a9
  • Kích thước của dữ liệu tính bằng byte (biến/đối tượng này sẽ yêu cầu bao nhiêu dung lượng). Cái này có kiểu dữ liệu =0
  • Cuối cùng, chúng ta cũng có giá trị của chính số nguyên, hay còn gọi là số thực mà bạn muốn lưu trữ trong biến. Theo mặc định, Python phân bổ ít nhất 4 byte cho việc này

Tất cả cùng nhau, điều này có nghĩa là một thể hiện của lớp int trong Python yêu cầu không gian cho một a8, một a9, một =0, tất cả đều là các loại C và chính số đó yêu cầu ít nhất 4 byte

Có lẽ bạn đã tìm ra cách tích lũy này lên 28 byte cho số 42 của chúng tôi. Tuy nhiên, để làm cho nó siêu rõ ràng, hãy quay lại một số mã C và kiểm tra kích thước của các loại dữ liệu đó

In ra kích thước của các loại dữ liệu bổ sung trong C

Tổng hợp 4 kích thước đó dẫn chúng ta đến 28 byte thần bí và đó là lý do tại sao số 42 của chúng ta chiếm quá nhiều dung lượng trong Python

Giới hạn phạm vi của int

Trong các kiểu dữ liệu C chỉ có thể chứa một số dãy số nhất định, vì chúng sẽ hết bit tại một số điểm. Chúng tôi có thể kiểm tra phạm vi của 4 byte int trên hệ thống của mình theo cách sau

INT_MIN và INT_MAX trong C

Điều này có nghĩa là nếu chúng ta muốn lưu trữ một số lớn hơn 2147483647 hoặc nhỏ hơn -2147483648 thì chúng ta phải sử dụng kiểu dữ liệu khác

Điều này hoạt động khác trong Python, vì đơn giản là không có giới hạn về số lượng giá trị lớn mà bạn có thể lưu trữ. Python sẽ đơn giản tiếp tục phân bổ nhiều byte hơn cho int của bạn

In kích thước của các số rất lớn bằng Python

Như bạn có thể thấy trong ảnh chụp màn hình ở trên, các số càng chiếm nhiều dung lượng thì chúng càng lớn. (Toán tử

//C
int x = 42;
float y = 1.5;
2 có nghĩa là lũy thừa của)

Những từ cuối

Bởi vì Python là một ngôn ngữ cấp cao nên nó trừu tượng hóa khái niệm về các loại dữ liệu khác nhau và các giới hạn kích thước thông thường mà chúng có. Ưu điểm của điều này là bạn có ít chi tiết kỹ thuật hơn để lo lắng và khả năng đọc và ghi có thể được cải thiện. Nhược điểm của điều này là bạn không hoàn toàn nhận thức được điều gì đang thực sự xảy ra và bạn không có nhiều quyền kiểm soát đối với các chi tiết nhỏ hơn trong chương trình của mình, điều này có thể khiến việc tối ưu hóa trở nên khó khăn hơn.

Bây giờ bạn đã biết tại sao các số trong Python lại cần nhiều bộ nhớ đến vậy và hy vọng bạn có thể sử dụng kiến ​​thức này để làm lợi thế cho mình

Một int sử dụng bao nhiêu bộ nhớ?

1 Số nguyên. Các số nguyên thường được lưu trữ bằng cách sử dụng một từ bộ nhớ, đó là 4 byte hoặc 32 bit , vì vậy các số nguyên từ 0 đến 4.294.967.295 (232 - 1) có thể được lưu trữ .

Một số nguyên trong Python có thể lớn đến mức nào trong 64

Số nguyên có dấu 64 bit. Nó có giá trị tối thiểu là -9.223.372.036.854.775.808 và giá trị tối đa là 9.223.372.036.854.775.807 (đã bao gồm) . Số nguyên không dấu 64 bit. Nó có giá trị nhỏ nhất là 0 và giá trị lớn nhất là (2^64)-1 (đã bao gồm).

Kích thước int mặc định của Python là gì?

x - kiểu int hiện có độ dài không giới hạn theo mặc định. Bạn không cần phải chỉ định loại biến bạn muốn; . số nguyên. Kiểu số nguyên cơ bản trong python, tương đương với phần cứng 'c long' cho nền tảng bạn đang sử dụng trong Python 2. x, không giới hạn độ dài trong Python 3.

Danh sách 1000000 số nguyên chiếm bao nhiêu byte trong Python?

Điều gì tạo nên một số nguyên trong Python. Vì một số nguyên nhỏ sử dụng 28 byte nên bây giờ chúng ta đã biết tại sao một triệu số nguyên chiếm 28MB RAM. Nhưng tại sao số nguyên Python lại chiếm nhiều bộ nhớ như vậy? .