شبیه سازی اشیاء برای سرگرمی و سود
عبارات انتساب در پایتون کپی از اشیاء ایجاد نمی کنند، بلکه آنها هستند فقط نام ها را به یک شیء متصل می کند. برای اشیاء تغییرناپذیر، که معمولا فرقی نمی کند اما برای کار با اشیاء قابل تغییر یا مجموعه ای از اشیاء قابل تغییر، ممکن است به دنبال راهی برای ایجاد “کپی واقعی” یا “کلون” از آن باشید اساساً، گاهی اوقات می خواهید کپی هایی را بخواهید که بتوانید بدون آن اصلاح کنید به طور خودکار نسخه اصلی را در همان زمان تغییر می دهد. در این فصل من قصد دارم خلاصه ای از نحوه کپی کردن یا “کلون کردن” اشیاء را به شما ارائه دهم در پایتون و برخی از اخطارهای مرتبط. این اشیاء بیایید با بررسی نحوه کپی کردن مجموعههای داخلی پایتون شروع کنیم. مجموعههای قابل تغییر داخلی پایتون مانند لیستها، دیکتها و مجموعهها میتوانند باشند با فراخوانی توابع کارخانه خود در مجموعه موجود کپی شده است:new_dict = dict(original_dict) new_set = set(original_set)با این حال، این روش برای اشیاء سفارشی و در بالای آن کار نخواهد کرد که، فقط کپی های سطحی ایجاد می کند. برای اشیاء مرکب مانند لیست ها، دیکته، و مجموعه، تفاوت مهمی بین کم عمق و وجود دارد کپی عمیق: new_list = list(original_list) کپی کم عمق به معنای ساختن یک شی مجموعه جدید و سپس در اصل، یک کپی کم عمق تنها یک سطح عمق دارد. فرآیند کپی کردن تکرار نمی شود و بنابراین کپی هایی از اشیاء فرزند ایجاد نمی کند خودشان پر کردن آن با ارجاع به اشیاء فرزند موجود در نسخه اصلی. یک کپی عمیق فرآیند کپی را بازگشتی می کند. به این معنی است که ابتدا یک شی مجموعه جدید بسازید و سپس به صورت بازگشتی آن را پر کنید با کپی از اشیاء کودک یافت شده در اصل. کپی کردن یک شی از این طریق، کل درخت شی را برای ایجاد یک شی کاملاً مستقل طی می کند میدونم یه ذره لقمه. پس بیایید به چند نمونه نگاه کنیم کلون شی اصلی و همه فرزندان آن. این تفاوت بین کپی های عمیق و کم عمق را به خانه هدایت کنید.در مثال زیر، یک لیست تودرتو جدید و سپس به صورت سطحی ایجاد می کنیم آن را با تابع list() factory کپی کنید:>>> xs = [[1, 2, 3], [4, 5, 6], [7, 8, 9]] ساختن کپی های کم عمق >>> ys = list(xs) # Make a shallow copyاین بدان معناست که ys اکنون یک شی جدید و مستقل با the خواهد بود همان محتویات xs. شما می توانید این موضوع را با بررسی هر دو شی تأیید کنید:[[1, 2, 3], [4, 5, 6], [7, 8, 9]] >>> xs >>> ys [[1, 2, 3], [4, 5, 6], [7, 8, 9]]|برای تأیید اینکه ys واقعاً از نسخه اصلی مستقل است، اجازه دهید a را طراحی کنیم.
قوانین ارسال دیدگاه در سایت