آموزش پایتون - کپی دیکشنری

کپی کردن دیکشنری‌ها

کپی کردن دیکشنری‌ها در پایتون به معنای ساخت یک دیکشنری جدید است که حاوی همان جفت‌های کلید-مقدار موجود در دیکشنری اصلی باشد.

ما می‌توانیم با استفاده از روش‌های مختلفی دیکشنری‌ها را کپی کنیم، که این روش‌ها بسته به نیازها و ماهیت مقادیر دیکشنری (اینکه تغییرپذیر یا تغییرناپذیر باشند، و تو در تو باشند یا خیر) تعیین می‌شوند.

کپی سطحی (Shallow Copy)

هنگامی که یک کپی سطحی انجام می‌دهید، یک شیء دیکشنری جدید ساخته می‌شود، اما این شیء حاوی ارجاعاتی به همان اشیایی است که دیکشنری اصلی به آن‌ها ارجاع می‌دهد.

این روش زمانی مفید است که می‌خواهید ساختار یک دیکشنری را بدون همانندسازی اشیاء تو در توی درون آن، تکثیر کنید.

این کار می‌تواند با استفاده از متد copy() یا تابع dict() انجام شود، همان‌طور که در ادامه نشان داده شده است −

مثال: استفاده از متد copy()

در مثال زیر، مشاهده می‌کنیم که تغییر دادن "age" در کپی سطحی، تأثیری روی دیکشنری اصلی ندارد.

با این حال، تغییر دادن لیست در کپی سطحی، روی دیکشنری اصلی نیز تأثیر می‌گذارد زیرا لیست یک شیء تغییرپذیر است و تنها ارجاع آن کپی شده است.

original_dict = {"name": "Alice", "age": 25, "skills": ["Python", "Data Science"]}
shallow_copy = original_dict.copy()

# Modifying the shallow copy
shallow_copy["age"] = 26
shallow_copy["skills"].append("Machine Learning")

print("Original dictionary:", original_dict)
print("Shallow copy:", shallow_copy)

خروجی کد بالا به صورت زیر است −

Original dictionary: {'name': 'Alice', 'age': 25, 'skills': ['Python', 'Data Science', 'Machine Learning']}
Shallow copy: {'name': 'Alice', 'age': 26, 'skills': ['Python', 'Data Science', 'Machine Learning']}

مثال: استفاده از متد dict()

مشابه متد copy()، متد dict() نیز یک کپی سطحی ایجاد می‌کند، همان‌طور که در مثال زیر نشان داده شده است −

original_dict = {"name": "Bob", "age": 30, "skills": ["Java", "C++"]}
shallow_copy = dict(original_dict)

# Modifying the shallow copy
shallow_copy["age"] = 31
shallow_copy["skills"].append("C#")

print("Original dictionary:", original_dict)
print("Shallow copy:", shallow_copy)

خروجی کد بالا به شرح زیر است −

Original dictionary: {'name': 'Bob', 'age': 30, 'skills': ['Java', 'C++', 'C#']}
Shallow copy: {'name': 'Bob', 'age': 31, 'skills': ['Java', 'C++', 'C#']}

کپی عمیق (Deep Copy)

یک کپی عمیق، یک دیکشنری جدید ایجاد می‌کند و تمام اشیاء موجود در دیکشنری اصلی را به صورت بازگشتی کپی می‌کند. این بدان معناست که نه تنها خود دیکشنری، بلکه تمام اشیاء درون آن (از جمله دیکشنری‌های تو در تو، لیست‌ها و غیره) نیز کپی می‌شوند. در نتیجه، تغییرات اعمال‌شده در کپی عمیق، تأثیری بر دیکشنری اصلی می‌گذارند و بالعکس.

ما می‌توانیم این کار را با استفاده از تابع deepcopy() در ماژول copy انجام دهیم.

مثال

در مثال زیر مشاهده می‌کنیم که مقدار "age" در کپی عمیق تغییر یافته، لیست "skills" در کپی عمیق دستکاری شده (یک آیتم به آن اضافه شده) و دیکشنری "education" در کپی عمیق تغییر کرده است، بدون اینکه هیچ‌کدام بر دیکشنری اصلی تأثیر بگذارند −

import copy

original_dict = {
    "name": "Alice",
    "age": 25,
    "skills": ["Python", "Data Science"],
    "education": {
      "degree": "Bachelor's",
      "field": "Computer Science"
   }
}

# Creating a deep copy
deep_copy = copy.deepcopy(original_dict)

# Modifying the deep copy
deep_copy["age"] = 26
deep_copy["skills"].append("Machine Learning")
deep_copy["education"]["degree"] = "Master's"

# Retrieving both dictionaries
print("Original dictionary:", original_dict)
print("Deep copy:", deep_copy)

این کد خروجی زیر را تولید خواهد کرد -- MOHTASHIM −

Original dictionary: {'name': 'Alice', 'age': 25, 'skills': ['Python', 'Data Science'], 'education': {'degree': "Bachelor's", 'field': 'Computer Science'}}
Deep copy: {'name': 'Alice', 'age': 26, 'skills': ['Python', 'Data Science', 'Machine Learning'], 'education': {'degree': "Master's", 'field': 'Computer Science'}}

کپی کردن دیکشنری‌ها با استفاده از متد copy()

دیکشنری‌ها را نمی‌توان به طور مستقیم با استفاده از عملگر انتساب (=) کپی کرد، شما می‌توانید از متد copy() برای ایجاد یک کپی سطحی از یک دیکشنری استفاده کنید.

سنتکس (نحو)

در ادامه، سنتکس پایه متد copy() در پایتون آمده است −

new_dict = original_dict.copy()

در اینجا، original_dict همان دیکشنری است که می‌خواهید آن را کپی کنید.

مثال

مثال زیر نحوه ایجاد یک کپی سطحی از یک دیکشنری با استفاده از متد copy() را نشان می‌دهد −

# Creating a dictionary
dict1 = {"name": "Krishna", "age": "27", "doy": 1992}

# Copying the dictionary
dict2 = dict1.copy()

# Printing both of the dictionaries
print("dict1 :", dict1)
print("dict2 :", dict2)

خروجی

خروجی را به صورت زیر دریافت خواهیم کرد −

dict1 : {'name': 'Krishna', 'age': '27', 'doy': 1992}
dict2 : {'name': 'Krishna', 'age': '27', 'doy': 1992}

پیشرفت مطالعه: وضعیت خوانده‌شدن این درس فقط در همین مرورگر ذخیره می‌شود؛ بدون نیاز به حساب کاربری.