آموزش پایتون - کپی مجموعه

کپی کردن مجموعه ها (Sets) در پایتون

کپی کردن مجموعه‌ها در پایتون به معنای ایجاد یک مجموعه جدید است که شامل همان عناصر یک مجموعه موجود باشد. بر خلاف انتساب ساده متغیرها که فقط یک ارجاع به مجموعه اصلی ایجاد می‌کند، کپی کردن تضمین می‌کند که تغییرات ایجاد شده در مجموعه کپی شده بر روی مجموعه اصلی تأثیری نگذارد و بالعکس.

روش‌های مختلفی برای کپی کردن یک مجموعه در پایتون وجود دارد، از جمله استفاده از متد ()copy، تابع ()set یا درک مجموعه (set comprehension).

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

متد ()copy در کلاس set برای ایجاد یک کپی سطحی (shallow copy) از یک شیء مجموعه استفاده می‌شود.

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

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

سنتکس (Syntax)

سنتکس متد ()copy به صورت زیر است −

set.copy()

مقدار بازگشتی

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

مثال

در مثال زیر، ما یک کپی از مجموعه "lang1" ایجاد کرده و آن را در "lang2" ذخیره می‌کنیم، سپس هر دو مجموعه و آدرس‌های حافظه آن‌ها را با استفاده از ()id بازیابی می‌کنیم.

پس از افزودن یک عنصر به "lang1"، دوباره هر دو مجموعه و آدرس‌های حافظه آن‌ها را بازیابی می‌کنیم تا نشان دهیم که "lang1" و "lang2" کپی‌های مستقلی هستند −

lang1 = {"C", "C++", "Java", "Python"}
print ("lang1: ", lang1, "id(lang1): ", id(lang1))
lang2 = lang1.copy()
print ("lang2: ", lang2, "id(lang2): ", id(lang2))
lang1.add("PHP")
print ("After updating lang1")
print ("lang1: ", lang1, "id(lang1): ", id(lang1))
print ("lang2: ", lang2, "id(lang2): ", id(lang2))

خروجی

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

lang1: {'Python', 'Java', 'C', 'C++'} id(lang1): 2451578196864
lang2: {'Python', 'Java', 'C', 'C++'} id(lang2): 2451578197312
After updating lang1
lang1: {'Python', 'C', 'C++', 'PHP', 'Java'} id(lang1): 2451578196864
lang2: {'Python', 'Java', 'C', 'C++'} id(lang2): 2451578197312

کپی کردن مجموعه‌ها با استفاده از تابع ()set

تابع ()set در پایتون برای ایجاد یک شیء مجموعه جدید استفاده می‌شود. این تابع یک قابل‌پیمایش (iterable) را به عنوان آرگومان دریافت کرده و آن را به یک مجموعه تبدیل می‌کند و در این فرآیند عناصر تکراری را حذف می‌کند. اگر آرگومانی داده نشود، یک مجموعه خالی ایجاد می‌کند.

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

مثال

در این مثال، ما یک کپی از "original_set" با استفاده از تابع ()set ایجاد کرده و آن را در "copied_set" ذخیره می‌کنیم −

# Original set
original_set = {1, 2, 3, 4}
# Copying the set using the set() function
copied_set = set(original_set)
print("copied set:", copied_set) 

# Demonstrating that the sets are independent
copied_set.add(5)
print("copied set:",copied_set)       
print("original set:",original_set)   

خروجی

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

copied set: {1, 2, 3, 4}
copied set: {1, 2, 3, 4, 5}
original set: {1, 2, 3, 4}

کپی کردن مجموعه‌ها با استفاده از درک مجموعه (Set Comprehension)

درک مجموعه (Set comprehension) یک روش فشرده برای ایجاد مجموعه‌ها در پایتون است. از این روش برای تولید یک مجموعه جدید با پیمایش روی یک قابل‌پیمایش و اعمال اختیاری شرط‌ها برای فیلتر کردن عناصر استفاده می‌شود. سنتکس آن مشابه درک لیست است اما به جای کروشه [] از آکولاد {} استفاده می‌کند −

{expression for item in iterable if condition}

ما می‌توانیم مجموعه‌ها را با استفاده از درک مجموعه، از طریق پیمایش روی عناصر مجموعه اصلی و ایجاد مستقیم یک مجموعه جدید با آن عناصر، کپی کنیم.

مثال

در مثال زیر، یک مجموعه اصلی به نام "original_set" ایجاد می‌کنیم، سپس آن را با استفاده از درک مجموعه در "copied_set" کپی می‌کنیم −

# Original set
original_set = {1, 2, 3, 4, 5}

# Copying the set using set comprehension
copied_set = {x for x in original_set}
print("Copied set:", copied_set)

خروجی

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

Copied set: {1, 2, 3, 4, 5}

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