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. copymodulidancopy.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