یک اسکریپت پایتون بنویسید که یک آرایه عددی با numpy ایجاد کند، سپس یک view و یک copy از آن بسازد، تغییراتی در یکی اعمال کند و با استفاده از تابع builtin id بررسی کند که آیا هر کدام به همان شیء یا همان بلوک حافظه ارجاع می‌دهند یا نه.

1.0 بازدید آخرین ویرایش در 221 روز قبل ساعت 01:05

0.0

با استفاده از Python و کتابخانه numpy آرایه‌ای مثل numpy.arange بسازید، سپس یک view (مثلاً با برش) و یک کپی (با .copy()) از آن ایجاد کنید. تغییراتی در یکی از آرایه‌ها اعمال کنید و با چاپ id(original)، id(view) و id(copy) هویت اشیاء را مقایسه کنید؛ برای بررسی اشتراک داده‌های حافظه در numpy می‌توانید از arr.ctypes.data یا arr.__array_interface__['data'][0] استفاده کنید. برای لیست‌های عادی هم می‌توانید از ماژول copy (copy و deepcopy) بهره ببرید تا تفاوت کپی سطحی و عمیق را ببینید؛ نکته کلیدی این است که id() شناسهٔ یکتای شی در حافظه را برمی‌گرداند و نشان می‌دهد که آیا دو نام به همان شیء اشاره دارند یا خیر.

توسط پژوهشگر در 221 روز قبل ساعت 01:05
دسته بندی ها: Python Python for beginner
reyhaneh در 221 روز قبل ساعت 14:41

یک نکته سریع: با استفاده از numpy، یک view داده‌های اصلی را به اشتراک می‌گذارد و یک copy یک نسخهٔ مستقل می‌سازد. بنابراین تغییر روی view روی آرایهٔ اصلی اثر می‌گذارد اما تغییر روی copy اثر ندارد و id(original) و id(view) معمولاً متفاوت‌اند. برای بررسی اشتراک حافظه، مقایسهٔ آدرس داده مانند view.ctypes.data یا view.__array_interface__['data'][0] با original نتیجهٔ دقیقی می‌دهد. همچنین می‌توانید از ویژگی base برای پی بردن به منبع داده استفاده کنید تا بفهمید آیا یک view به همان آرایهٔ پایه اشاره می‌کند یا از طریق چندین لایهٔ نمایشی گشته است.

گزارش

1 پاسخ

جدید ترین قدیمی ترین بالاترین امتیاز پاسخ های من

در حال بارگیری...
ورود به حساب کاربری