Pythonda listeden eleman silme

array=[[1,0,0,0,0,0],[0,1,0,1,1,1],[0,0,1,0,1,0],[1,1,0,0,1,0],[1,0,1,1,0,0],[1,0,0,0,0,1]]
array2=array
array2.pop()
array2.pop(0)
for i in array2:
    i.pop()
    i.pop(0)
print(f"Array 1 {array}")
print(f"Array 2 {array2}")

Bu kodu yaptığım zaman böle çıktı veriyor
image
hem array 1 i hemde array 2 yi değiştiriyor ben sadece 1 ini değiştirsin istiyorum nasıl yapabilirim

array2 ve array bellekte ayni yere isaret ediyorlar, Python’in bellekle alakali tuhaf yaklasimlarindan biri.

import copy

array  = [[1,0,0]]
array2 = copy.deepcopy(array)

Bu ornekte oyle bir durum yok, direkt isaret ettigi icerik kopyalaniyor ve birbirinden bagimsiz iki degisken olusuyor.

Teşekkür ederim oldu. Sanırım copy.copy diyede bir fonksiyon var onunla deepcopynin farkı ne biliyormusunuz

copy.copy, degeri shallow copy ediyor, yani bellekte kopyalanacak degere isaret eden bir referans olusturuyor. array degiskeni tanimlandiginda bellekte bu liste su halde var: [[1,0,0,0], [2,0,1...]]. array degiskeni bu degere isaret ediyor. Esittir (=) operatoru ile array2 olusturuldugunda array2 de bellekte ayni degere isaret ediyor, birini kullanarak veride bir degisiklik yapmak digerini de etkiliyor cunku onlar zaten aslinda ayni sey.

copy.deepcopy ise bellekte ayni seyi tekrar olusturuyor ve array2 yeni degere isaret ediyor, dolayisiyla iki degisken birbirinden bagimsiz oluyor. Bu da deep copy.

Tamam teşekkür ederim

1 Beğeni

copy listenin kopyasini olusturuyor.

deepcopy listenin kopyasini ve her elemaninin deepcopy'sini olusturuyor (recursive).

Farki icinde referans turu (mesela liste) olan listelerle deneyerek gorebilirsiniz.

(Bu arada “liste” → “obje”.)

2 Beğeni