فضای ذخیره سازی در متغیرها

  • مدرس : علی بیگدلی
  • تاریخ انتشار: 1405/01/31
  • تعداد بازدید: 124

۱. اعداد صحیح (int)

اعداد صحیح در پایتون محدودیت اندازه ندارند، اما فضای اولیه آن‌ها ثابت است. یک عدد صحیح معمولی حدود ۲۸ بایت فضا می‌گیرد.

اعداد در پایتون Immutable (تغییرناپذیر) هستند. این یعنی اگر عددی را تغییر دهید، پایتون عدد جدید را در یک آدرس حافظه جدید ذخیره می‌کند و متغیر را به آن آدرس جدید هدایت می‌کند.

اعداد صحیح کوچک (تا ۲۸-۳۰ بیت) در داخل خود ساختار شیء ذخیره می‌شوند. اما وقتی عدد بزرگ‌تر شود، پایتون از یک آرایه داخلی برای نگهداری "بخش‌های" عدد استفاده می‌کند.

10       # 28 بایت
100      # 28 بایت
1000     # 28 بایت
1000000  # 28 بایت
# توضیح:
# اعداد کوچک (تا 2^30) همه 28 بایت فضا می‌گیرند.
# فقط وقتی عدد خیلی بزرگ شود (مثلاً 10^20) فضای بیشتری نیاز است.

مثال مقایسه‌ای

عدد حافظه توضیح
1 28 بایت حداقل فضای int
1,000,000 28 بایت هنوز در همان محدوده کوچک
1,000,000,000,000 32 بایت شروع به بزرگ شدن کرد

۲. اعداد اعشاری (float)

اعداد اعشاری همیشه ۲۴ بایت فضا می‌گیرند، چه کوچک باشند چه بزرگ.

1.0        # 24 بایت
3.14       # 24 بایت
1000.5     # 24 بایت
1e100      # 24 بایت (عدد بسیار بزرگ)
# توضیح:
# تمام اعداد float دقیقاً 24 بایت هستند.
# این به دلیل استاندارد IEEE 754 است.

محدودیت مقدار

  • حداکثر عدد float تقریباً: 1.8 * 10^308
  • حداقل عدد غیرصفر: 5 * 10^-324
  • دقت: حدود ۱۵-۱۷ رقم اعشار
x = 1.7976931348623157e+308  # نزدیک به حداکثر
print(x)  # 1.7976931348623157e+308
y = x * 2
print(y)  # inf (بی‌نهایت - چون از حد فراتر رفت)

۳. رشته‌ها (str)

در پایتون ۳ و بالاتر، رشته‌ها از حالت فشرده (Compact) استفاده می‌کنند. این یعنی فضای حافظه دقیقاً متناسب با تعداد کاراکترهاست.

""        # 41 بایت (فقط هزینه پایه)
"A"       # 42 بایت (41 + 1)
"Hi"      # 43 بایت (41 + 2)
"Hello"   # 46 بایت (41 + 5)
# توضیح:
# در پایتون‌های مدرن، هزینه پایه حدود 41 بایت است.
# هر کاراکتر انگلیسی (ASCII) دقیقاً 1 بایت فضا می‌گیرد.

مثال‌های مختلف

رشته طول حافظه توضیح
"" 0 41 بایت فقط هزینه پایه
"Hi" 2 43 بایت 41 + 2
"Hello World" 11 52 بایت 41 + 11
"س" 1 60 بایت ساختار یونیکد (فضای بیشتر برای کاراکتر غیر-ASCII)
"سلام" 4 66 بایت ۴ کاراکتر فارسی با ساختار یونیکد

۴. بولین (Boolean)

در پایتون، bool یک زیرمجموعه (subclass) از int است. مقدار True معادل ۱ و False معادل ۰ است. با این حال، از نظر حافظه، یک شیء بولین همان ساختار یک شیء عدد صحیح کوچک را دارد.

True   # 28 بایت
False  # 28 بایت
# توضیح:
# هر شیء بولین 28 بایت فضا می‌گیرد.
# این مقدار دقیقاً مشابه یک عدد صحیح کوچک (int) است.
# در واقع True 1 و False 0 از نظر حافظه مشابه هستند.

چرا بولین ۲۸ بایت است؟

هر شیء در پایتون یک Object Header دارد که شامل موارد زیر است:

  • Reference Count: شمارنده ارجاع (معمولاً ۸ بایت)
  • Type Pointer: اشاره‌گر به نوع شیء (معمولاً ۸ بایت)
  • Value: مقدار واقعی (برای int/bool معمولاً ۸ بایت)

جمع این بخش‌ها حدود ۲۴ تا ۲۸ بایت می‌شود (بسته به سیستم و نسخه پایتون).

۵. None

مقدار None یک شیء یکتا است. در پایتون فقط یک نمونه از NoneType وجود دارد. یعنی تمام متغیرهایی که None هستند، به یک شیء واحد در حافظه اشاره می‌کنند.

None  # 16 بایت
# توضیح:
# اما نکته مهم این است که هیچ فضای اضافی برای داده‌ی واقعی نیاز نیست،
# چون خود شیء None ثابت و یکتا است.

مقایسه نهایی

نوع داده حافظه مصرفی توضیح
bool (True/False) 28 بایت مشابه int کوچک
None 16 بایت شیء یکتا، همه به یک نقطه اشاره می‌کنند
int (کوچک) 28 بایت حداقل فضای عدد صحیح

نکات تکمیلی

  • هر سه نوع bool و int (کوچک) در پایتون ۶۴ بیتی حدود ۲۸ بایت فضا می‌گیرند.
  • تفاوت اصلی در محتوا است، نه در حجم حافظه برای مقادیر ساده.
  • اگر می‌خواهید حافظه کمتری مصرف کنید، از None برای نشان دادن "عدم وجود مقدار" استفاده کنید، نه از رشته خالی یا لیست خالی (که فضای بیشتری دارند).
  • در عمل، تفاوت ۴-۸ بایتی بین این انواع برای برنامه‌های معمولی ناچیز است، اما در دیتابیس‌ها یا پردازش میلیون‌ها رکورد می‌تواند تأثیرگذار باشد.

ثبت دیدگاه


نکته: آدرس ایمیل شما منتشر نخواهد شد
0/600

دیدگاه کاربران (1)


avatar
امیرحسین عظیمی
16 , تیر , 1405 - 17:24 بعد از ظهر

این یکی درس واقعا جذاب بود به جای استرینگ خالی none بزاریم

نکته: آدرس ایمیل شما منتشر نخواهد شد
0/600