Na forum 4programmers.net korzystamy z plików cookies. Część z nich jest niezbędna do funkcjonowania
naszego forum, natomiast wykorzystanie pozostałych zależy od Twojej dobrowolnej zgody, którą możesz
wyrazić poniżej. Klikając „Zaakceptuj Wszystkie” zgadzasz się na wykorzystywanie przez nas plików cookies
analitycznych oraz reklamowych, jeżeli nie chcesz udzielić nam swojej zgody kliknij „Tylko niezbędne”.
Możesz także wyrazić swoją zgodę odrębnie dla plików cookies analitycznych lub reklamowych. W tym celu
ustaw odpowiednio pola wyboru i kliknij „Zaakceptuj Zaznaczone”. Więcej informacji o technologii cookie
znajduje się w naszej polityce prywatności.
defklonowanie(self, obiekt, j):for i inrange(1, j+1):
klon_obiektu = copy.deepcopy(obiekt)print(i,"obiekt sklonowany")return klon_obiektu
a = klasaA()
klonowanie(a,5)
O ile przy robieniu jednego klonu nie miałem wątpliwości to przy robieniu kilku mam wątpliwości czy robię to dobrze. Prośba o pomoc. Z góry dzięki za pomoc.
Zapoznaj się z yield. Bo obecnie zakładając że sklonujesz obiekt 5-ciokrotnie. To nadal uzyskasz tylko ostatnią jego kopię w return.
Kopiuj
defklonowanie(self, obiekt, j):for i inrange(1, j+1):yield copy.deepcopy(obiekt)
a = klasaA()for obj in klonowanie(a,5):print(obj)
W ten sposób dostaniesz wszystkie klony po kolei w pętli for.
Bo po co robić tyle klonów, skoro ich nie wykorzystujesz w żaden sposób, ponadto po nadpisaniu adresu do zmiennej i która będzie wskazywać na nowy obiekt, stary do którego nie ma już żadnych odwołań, albo przestanie istnieć przy kolejnej iteracji, albo w ostateczności zajmie się nim garbage collector po wyjściu z funkcji.
W ten sposób możesz te obiekty dodać choćby do jakiejś listy, na przykład tak:
copy.deepcopy
jest funkcją rekurencyjną. Zachęcam do zapoznanie się z implementacją: https://github.com/python/cpython/blob/3.7/Lib/copy.py