Wpis z mikrobloga

via Wykop Mobilny (Android)
  • 2
@captain69teemo: jedno dodaje do listy w miejscu, drugie tworzy nowa liste i przypisuje ja do lokalnej zmiennej list (swoja droga, unikaj nazywania zmiennych tak samo jak builtiny). Jak tej lokalnej zmiennej nie zwrocisz nigdzie i jej nie przypiszesz do czegos, to nic z nia nie zrobisz i zostanie zgarnieta przez garbage collector
  • Odpowiedz
@captain69teemo: To pierwsze pod spodem dodaje do istniejącego obszaru pamięci.
Jeśli nie ma tam miejsca, to najpierw robi realloc i zwiększa obszar o pewną wartość.
list_resize() w listobject.c

* The growth pattern is: 0, 4, 8, 16, 24, 32, 40, 52, 64, 76,
  • Odpowiedz
@scorpio18k: Wiem, chodziło mi o przedstawienie przykładu gdzie to ma duże znaczenie czego użyjemy. Jest to jeszcze ważniejsze jeśli mamy funkcję z argumentami domyślnymi.
  • Odpowiedz
@Hauleth: I prawdopodobnie o to chodziło OP. Pewnie dodaje do tej jednej referencji wyliczonej jako argument domyślny funkcji i mu się akumuluje błąd, a w drugim przypadku ma nową listę. Nie podał jednak właściwego kontekstu.
  • Odpowiedz