Sobes.tech
Junior

Nima yuzaki nusxa olish?

sobes.tech AI

AIdan javob

Yuzaki nusxa yaratadi yangi murakkab ob'ekt, ammo uning ichidagi joylashgan ob'ektlarning nusxalarini yaratmaydi. O'rniga, asl ob'ektning joylashgan ob'ektlariga havolalar nusxalanadi.

Asosiy nuqtalar:

  • Yangi to'plam (ro'yxat, lug'at, to'plam) yaratadi.
  • Yangi to'plam elementlari, asl to'plam elementlari bilan bir xil ob'ektlarga havolalar bo'lib xizmat qiladi.
  • Bir nusxadagi joylashgan ob'ektlarni o'zgartirish, boshqasida ham ko'rinadi.
  • To'plamning o'zi (elementlarni qo'shish/olib tashlash) o'zgartirilsa, boshqa nusxaga ta'sir qilmaydi.

Amaliyotlar:

  • Ro'yxatlar, lug'atlar, to'plamlar uchun .copy() usuli.
  • copy modulidan copy.copy() funksiyasi.
  • Ro'yxatlar uchun kesish [:] texnikasi.
# Ro'yxat bilan misol
original_list = [[1, 2], 3]
shallow_copy_list = original_list.copy()

print(f"Asl: {original_list}")
print(f"Yuzaki nusxa: {shallow_copy_list}")
print(f"Joylashgan ro'yxatlarning identifikatori: {original_list[0] is shallow_copy_list[0]}") # True - havolalar bir xil

original_list[0][0] = 99 # Joylashgan ro'yxatni o'zgartirish

print(f"O'zgartirishdan keyin: {original_list}")
print(f"Yuzaki nusxa o'zgartirishdan keyin: {shallow_copy_list}") # Ikkala nusxada ham o'zgarishlar ko'rinadi

original_list.append(4) # To'plamni o'zgartirish

print(f"Appenddan keyin: {original_list}")
print(f"Yuzaki nusxa appenddan keyin: {shallow_copy_list}") # Faqat originalda
# copy.copy() misoli
import copy

original_dict = {'a': [1, 2], 'b': 3}
shallow_copy_dict = copy.copy(original_dict)

print(f"Asl: {original_dict}")
print(f"Yuzaki nusxa: {shallow_copy_dict}")
print(f"Joylashgan ro'yxatlarning identifikatori: {original_dict['a'] is shallow_copy_dict['a']}") # True

original_dict['a'][0] = 99 # Joylashgan ro'yxatni o'zgartirish

print(f"O'zgartirishdan keyin: {original_dict}")
print(f"Yuzaki nusxa o'zgartirishdan keyin: {shallow_copy_dict}") # O'zgarishlar ikkala nusxada ham ko'rinadi