OS | macOS Sierra |
---|---|
CPU | 2.3 GHz Intel Core i7 |
Mémoire | 16 GB 1600 MHz DDR3 |
Version Python | 2.7.10 |
time.time ()
avant et après l'appel de fonction pour mesurer le temps d'exécution par la différencedis
pour vérifier le code d'octetdef add(list_x, list_y):
list_x = list_x + list_y
return list_x
def inplace(list_x, list_y):
list_x += list_y
return list_x
list_a = [[0 for x in range(10000)] for y in range(10000)]
list_b = [[0 for x in range(10000)] for y in range(10000)]
add(list_a, list_b)
Temps d'exécution: 0.000458
id(list_a): 4391953400 -> 5530614960
------ dis.dis(add) ------
8 0 LOAD_FAST 0 (list_a)
3 LOAD_FAST 1 (list_b)
6 BINARY_ADD
7 STORE_FAST 0 (list_a)
9 10 LOAD_FAST 0 (list_a)
13 RETURN_VALUE
inplace(list_a, list_b)
Temps d'exécution: 0.000285
id(list_a): 5530614960 -> 5530614960
------ dis.dis(inplace) ------
44 0 LOAD_FAST 0 (list_a)
3 LOAD_FAST 1 (list_b)
6 INPLACE_ADD
7 STORE_FAST 0 (list_a)
45 10 LOAD_FAST 0 (list_a)
13 RETURN_VALUE
add | inplace | résultat | |
---|---|---|---|
Temps d'exécution | 0.000458 | 0.000285 | en place est plus rapide |
Différence de code d'octet | BINARY_ADD | INPLACE_ADD | Vous pouvez voir qu'il a changé même avec le code d'octet |
id(list_a) | Il y a un changement | Pas de changement | add est créé en tant que nouvel objet et place se voit attribuer une valeur au même objet. |
Je n'avais jamais été au courant des mouvements internes des deux parties, alors j'ai enquêté moi-même. Tant que je suis gêné quand je pensais: "Faisons-le ensemble!" ... C'est à cette époque que j'ai commencé à penser que je devrais acquérir une attitude pour comprendre ces parties.
Recommended Posts