پاسخ های این سوال یک تلاش جامعه است. برای بهبود این پست پاسخ های موجود را ویرایش کنید. در حال حاضر پاسخ ها یا تعامل های جدید را نمی پذیرد.
تفاوت بین یک کپی عمیق و یک کپی کم عمق چیست؟
31 پاسخ 31
وسعت در مقابل عمق ؛از نظر درخت منابع با شیء خود به عنوان گره ریشه فکر کنید.


متغیرهای A و B به مناطق مختلف حافظه اشاره می کنند ، هنگامی که B به یک دو متغیر اختصاص می یابد ، به همان منطقه حافظه مراجعه می کنند. تغییرات بعدی در محتوای هر دو فوراً در محتوای دیگر منعکس می شود ، زیرا آنها محتویات را به اشتراک می گذارند.


متغیرهای A و B به مناطق مختلف حافظه اشاره می کنند ، هنگامی که B به مقادیر موجود در منطقه حافظه اختصاص می یابد که نقاط آن را در منطقه حافظه که B به آن اشاره می شود ، کپی می شود. تغییرات بعدی در محتوای یا یا برای A یا B منحصر به فرد است. مطالب به اشتراک گذاشته نمی شوند.
در اینجا مقاله ویکی پدیا وجود دارد که این تصویر در صورتی که از متن برای شما خارج نشود ، از شما خارج نمی شود.
در صورت کپی کم عمق اگر در آرایه B تغییراتی ایجاد کنیم ، آیا از آنجا که A& B به محل حافظه یکسان است ، در آرایه A منعکس می شود؟
JasonLeonHard بنابراین 9 سال پیش من فقط URL ها را برای تصاویر قرار داده ام زیرا تعبیه تصاویر پشتیبانی نمی شود. بنابراین URL منبع خود را ذکر کرد. جامعه بعداً URL ها را به تصاویر تعبیه شده بدون ویرایش نوعی استناد به آن تبدیل کرد. نظر برتر 4 ساله همچنین به آنچه شما اشاره می کنید اشاره می کند. نگاهی بیندازید: stackoverflow.com/posts/184780/revisions چرا فقط خودتان یک استناد را ویرایش نکنید؟من ممکن است دفعه بعد که کسی شکایتی در مورد سبک نوشتن 10 ساله من داشته باشد ، در دسترس نباشم.
"برای متغیرهای A و B ، وقتی B به کد" آیا این به معنای "A = B" در کد نیست؟من به نوعی گیج شده ام ، زیرا تصویر منعکس کننده "b = a" است.
کپی های کم عمق تا حد ممکن کپی می کنند. یک کپی کم عمق از یک مجموعه یک کپی از ساختار مجموعه است ، نه عناصر. با یک کپی کم عمق ، دو مجموعه اکنون عناصر فردی را به اشتراک می گذارند.
کپی های عمیق همه چیز را کپی می کنند. یک نسخه عمیق از یک مجموعه ، دو مجموعه با تمام عناصر موجود در مجموعه اصلی کپی شده است.
به خاطر داشته باشید که نسخه های مختلط نیز وجود دارد (نه تنها مانند کپی تنبل) ، که فقط بخشی از آن را کپی می کند (در اینجا یک نمونه است)!؛)
مجموعه های Honey می توانند ساختار داده متنوعی باشند که چندین مورد داده را ذخیره می کنند. در پایتون ما Tuple ، لیست ، فرهنگ لغت و غیره داریم
Royinamir شما احتمالاً قبلاً این موضوع را در 7 سال گذشته فهمیده اید ، اما برای هر کس دیگری که در این مورد تعجب کرده است: "کپی کم عمق نوع مقدار مقدار را به صورت بیت کپی می کند" صحیح است ، اما کمی گیج کننده است. اگر یک شیء مشتری دارید که "" یک شیء آدرس دارد ، کپی کردن شی مشتری "بیت بیت" به این معنی است که اشاره گر/مرجع به شیء آدرس کپی می شود. اصلی و کپی هر دو به یک شیء آدرس یکسان اشاره دارند ، در حالی که یک کپی عمیق یک شیء آدرس جدید ایجاد می کند و در عوض به آن اشاره می کند.
سعی کنید تصویر زیر را در نظر بگیرید

به عنوان مثال Object. MemberWiseclone یک لینک کپی کم عمق ایجاد می کند
و با استفاده از رابط iCloneable می توانید همانطور که در اینجا توضیح داده شده است ، کپی عمیق دریافت کنید
این پاسخ کپی را با مرجع در مقابل کپی بر اساس مقدار توضیح می دهد. کپی کم عمق در مقابل کپی عمیق مفهومی است که در مورد مجموعه ها صدق می کند. این پاسخ و این پاسخ را ببینید.
به طور خلاصه ، بستگی به این دارد که چه چیزی به چه چیزی اشاره دارد. در یک کپی کم عمق ، Object B به مکان A در حافظه اشاره می کند. در کپی عمیق ، همه چیز در محل حافظه Object A در مکان حافظه Object B کپی می شود.
این مقاله ویکی یک نمودار عالی دارد.
مخصوصاً برای توسعه دهندگان iOS:
اگر B یک کپی کم عمق از A است ، پس برای داده های ابتدایی مانند B = [A Assign] است. و برای اشیاء مانند b = [یک نگهدارنده] است.
B و یک نقطه به همان مکان حافظه
اگر B یک کپی عمیق از A است ، پس مانند B = [یک نسخه] است.
B و یک نکته به مکان های مختلف حافظه
آدرس حافظه B همانند A است
B دارای مطالب مشابه A است
کپی کم عمق: مقادیر عضو را از یک شیء به دیگری کپی می کند.
کپی عمیق: مقادیر عضو را از یک شی به دیگری کپی می کند. هر اشیاء اشاره گر کپی شده و کپی شده است.
فقط به خاطر درک آسان می توانید این مقاله را دنبال کنید: https://www.cs. utexas. edu/~Scottm/CS307/راهنما/deepcopying. htm
کپی کم عمق:
کپی عمیق:
من جواب کوتاه و آسان را در اینجا ندیده ام-بنابراین من آن را امتحان می کنم.
با یک کپی کم عمق ، هر شیء که به منبع آن اشاره می شود نیز به مقصد اشاره می شود (به طوری که هیچ اشیاء ارجاعی کپی نمی شوند).
با یک کپی عمیق ، هر شیء که به منبع آن اشاره می شود کپی می شود و کپی به مقصد اشاره می شود (بنابراین اکنون 2 مورد از هر شیء ارجاع شده وجود خواهد داشت). این باعث می شود درخت شیء پایین بیاید.
کپی کم عمق: به سادگی یک نسخه از مرجع به A را به B. تهیه کنید. در مورد آن به عنوان یک نسخه از آدرس A فکر کنید. بنابراین ، آدرس های A و B یکسان خواهد بود ، یعنی آنها به همان مکان حافظه یعنی محتوای داده اشاره می کنند.
کپی عمیق: به سادگی یک نسخه از همه اعضای A را تهیه کنید ، حافظه را در یک مکان متفاوت برای B اختصاص می دهد و سپس اعضای کپی شده را برای دستیابی به کپی عمیق به B اختصاص می دهد. به این ترتیب ، اگر A غیر موجود باشد B هنوز در حافظه معتبر است. اصطلاح صحیح برای استفاده کلونینگ است ، جایی که می دانید هر دو کاملاً یکسان هستند ، اما در عین حال متفاوت هستند (یعنی به عنوان دو موجود مختلف در فضای حافظه ذخیره می شوند). همچنین می توانید بسته بندی کلون خود را در جایی که می توانید از طریق لیست گنجاندن/محرومیت تصمیم بگیرید کدام خصوصیات را برای انتخاب در طول کپی عمیق انتخاب کنید. این یک عمل کاملاً معمول است که شما API ایجاد می کنید.
شما می توانید یک کپی کم عمق را انجام دهید فقط_ اگر سهام موجود را درک کرده اید. هنگامی که تعداد زیادی از نشانگرها برای مقابله با C ++ یا C دارید ، انجام یک کپی کم عمق از یک شیء واقعاً ایده بدی است.
مثال_ف_دپ کپی_ نمونه ای از این است که ، وقتی می خواهید پردازش تصویر را انجام دهید و به رسمیت شناختن شیء باید "حرکت بی ربط و تکراری" را از مناطق پردازش خود نقاب بزنید. اگر از نشانگرهای تصویر استفاده می کنید ، ممکن است مشخصات آن را برای ذخیره آن تصاویر ماسک داشته باشید. اکنون. اگر یک کپی کم عمق از تصویر را انجام دهید ، هنگامی که منابع نشانگر از پشته کشته می شوند ، مرجع را از دست داده اید و نسخه آن یعنی خطای زمان اجرا در نقض دسترسی در برخی از نقاط وجود خواهد داشت. در این حالت ، آنچه شما نیاز دارید یک کپی عمیق از تصویر شما با کلون کردن آن است. در این روش می توانید ماسک ها را در صورت نیاز به آنها در آینده بازیابی کنید.
به عنوان مثال_OF_SHALLALL_COPY من در مقایسه با کاربران در StackOverflow بسیار آگاه نیستم ، بنابراین در صورت امکان می توانید این قسمت را حذف کنید و اگر می توانید توضیح دهید. اما من واقعاً فکر می کنم اگر می دانید که برنامه شما برای یک دوره نامتناهی اجرا می شود ، یعنی عملکرد مداوم "فشار پاپ" بر روی پشته با تماس های عملکردی ، ایده خوبی نیست. اگر چیزی را به یک شخص آماتور یا تازه کار نشان می دهید (به عنوان مثال موارد آموزش C/C ++) ، احتمالاً اشکالی ندارد. اما اگر برنامه ای مانند سیستم نظارت و تشخیص یا سیستم ردیابی سونار را اجرا می کنید ، قرار نیست کپی کردن کم عمق اشیاء خود را در اطراف خود نگه دارید زیرا این برنامه شما را دیر یا زود از بین می برد.
کتاب آموزش بورس...
ما را در سایت کتاب آموزش بورس دنبال می کنید
برچسب :
نویسنده : محسن زنجانچی
بازدید : <-PostHit->
تاريخ : دوشنبه
25 ارديبهشت
1402 ساعت: 12:23