Forwarded from Django Expert (Amir Rahmani)
✔️ programming problems - Bradley Green (1 & 2)
#algorithm #data_structure #intetview #cpp
#Book #English_book
〰️〰️〰️〰️〰️
©️ @DjangoEx
#algorithm #data_structure #intetview #cpp
#Book #English_book
〰️〰️〰️〰️〰️
©️ @DjangoEx
✔️ سوال: چرا با وجود این که دو لیست a و b مقدار برابر دارند، اما حجم اشغال شده در حافظه برای لیست b از لیست a بیشتر است؟
سطح: پیشرفته
#quiz #python #data_structure
〰️〰️〰️〰️〰️
© @DjangoEx
سطح: پیشرفته
#quiz #python #data_structure
〰️〰️〰️〰️〰️
© @DjangoEx
👍1
[1/2]
✔️ پاسخ سوال: در تصویر 1 لیستی به نام a به طول 5 و محتوای object ایجاد کردهایم. اگر به نمایش این لیست دقت کنید متوجه خواهید شد که تمامی اشیاء موجود در لیست a دارای یک آدرس یکسان در memory هستند. درواقع پایتون در این حالت برای جلوگیری از ساختن یک شئ ثابت به تعداد زیاد، اول یک نمونه از آنرا ساخته و سپس تمامی اعضای آرایه را به آن ارجاع (reference) میدهد. اگر قطعه کد
را اجرا کنیم خروجی 6 (رفرنس) را برمیگرداند. مقدار 5 مورد انتظار است اما آن یک واحد اضافه به دلیل رفرنس موقتی است به عنوان ورودی تابع
اما در حالت دوم داخل loop هربار یک شئ ایجاد میشود و آدرسها تغییر میکند. این موضوع زمانی که قصد مقداردهی اولیه یک لیست با حجم بالا را داریم، هزینه زمانی و حافظهای زیادی دارد.
دلیل تفاوت حجم لیست a و b در حافظه
با دقت به تصویر 2 متوجه خواهید شد که با تعریف لیست a به روش اول، تقریبا حجم 136 بایت در حافظه اشغال شده اما این مقدار برای لیست b برابر 184 میباشد.
〰️〰️〰️〰️〰️
© @DjangoEx
✔️ پاسخ سوال: در تصویر 1 لیستی به نام a به طول 5 و محتوای object ایجاد کردهایم. اگر به نمایش این لیست دقت کنید متوجه خواهید شد که تمامی اشیاء موجود در لیست a دارای یک آدرس یکسان در memory هستند. درواقع پایتون در این حالت برای جلوگیری از ساختن یک شئ ثابت به تعداد زیاد، اول یک نمونه از آنرا ساخته و سپس تمامی اعضای آرایه را به آن ارجاع (reference) میدهد. اگر قطعه کد
sys.getrefcount(a[0])
را اجرا کنیم خروجی 6 (رفرنس) را برمیگرداند. مقدار 5 مورد انتظار است اما آن یک واحد اضافه به دلیل رفرنس موقتی است به عنوان ورودی تابع
getrefcount
ساخته شده است.اما در حالت دوم داخل loop هربار یک شئ ایجاد میشود و آدرسها تغییر میکند. این موضوع زمانی که قصد مقداردهی اولیه یک لیست با حجم بالا را داریم، هزینه زمانی و حافظهای زیادی دارد.
دلیل تفاوت حجم لیست a و b در حافظه
با دقت به تصویر 2 متوجه خواهید شد که با تعریف لیست a به روش اول، تقریبا حجم 136 بایت در حافظه اشغال شده اما این مقدار برای لیست b برابر 184 میباشد.
〰️〰️〰️〰️〰️
© @DjangoEx