یکی از مشکلاتی که خیلی از برنامه نویس ها در موردش وسواس دارن، استفاده و صرفه جویی در حافظه اشغال شده توسط نرم افزاره، حالا در ابعاد کوچکتر اشاره میکنم به وجود یا ایجاد متغیرهای بلاتکلیف. برای مثال در زبان C بعد از تعریف متغیر، میتونیم توسط & به آدرس متغیر دسترسی داشته باشیم.
1 2 3 |
int a,b; int* addrـa = &a; // 801658812 int* addr_b = &b; // 801658808 |
آدرس هر متغیری توسط خود کامپایلر تولید میشه. معمولا پیدا کردن آدرس متغیر در هر زبانی کار سختی نیست و راحت میتونیم بهش دسترسی پیدا کنیم، به جز چند زبان مثل #C که فقط در حالت unsafe جواب میده، یا JAVA که بهتره بی خیال پیدا کردن آدرس بشیم چون باید از hashCode استفاده بشه که اونم قسمتی از آدرس رو برمی گردونه. حالا کاری به نحوه دسترسی به آدرس نداریم، هدف من اینه که با استفاده از آدرس متغیرها یکی از نکات پایتون رو توضیح بدم؛ همونطور که پایتون در مورد خیلی از مسائل قدرتمنده در مورد مدیریت متغیر ها هم همینطوره.
مثال:
1 2 3 4 5 6 |
a = 1; b = 2; print id(a); # 14572648 print id(b); # 14572624 b = 1; print id(b); # 14572648 |
داخل برنامه وقتی دو متغیر با یک مقدار ایجاد میشه پایتون فضای یکی از متغیرها رو آزاد میکنه و یک آدرس به هر دو متغیر اختصاص میده. شاید این نکته در برنامه های ما زیاد محسوس نباشه ولی در نرم افزارهای بزرگ حتما به درد میخوره و شما حتی متوجه نمیشین که پایتون چطوری هواتون و داره، البته در مورد پایتون حرف از آدرس متغیر زدن کار زیاد درستی نیست چون کار آدرس دهی سطح پایین مثل زبان C رو دیگه پشتیبانی نمیکنه و تابع id فقط یک عدد یونیک برای هر متغیری تولید میکنه که میتونیم به عنوان آدرس ازش استفاده کردیم.
نکته: عوض کردن آدرس متغیر کار راحتی نیست ولی Perl به راحتی این کار رو انجام میده که معمولا کسانی که کارشون امنیت باشه و یا هکر باشن خیلی به دردشون می خوره.