# ===================================================================
# créer une matrice
# l'écriture suivante pose problème car 'ligne' est trois fois
# la même variable, donc si on modifie un élément de ligne il 
# est répercuté sur les autres lignes
# ===================================================================
ligne = [0, 0, 0, 0, 0]
matrice = [ ligne, ligne, ligne ]

matrice[0][3] = 1
print(matrice)
# [[0, 0, 0, 1, 0], [0, 0, 0, 1, 0], [0, 0, 0, 1, 0]]

# ===================================================================
# oubli
# au lieu d'écrire t[i] == True, on a écrit :
# mais Python n'indique aucune erreur !!
# ===================================================================
i = 1
if [i] == True:
	print("ici")
else:
	print("non, ici !")
	
# ===================================================================	
#
# modification d'un élément répercutée sur la liste passée en 
# paramètre dans f(x) : ok
#
# ===================================================================
def f(x):
    x[3] = 99

z = [0 for _ in range(5)]

print(z) # [0, 0, 0, 0, 0]
f(z)
print(z) # [0, 0, 0, 99, 0] OK !

# ===================================================================
#
# modification de la structure non répercutée sur la liste x : ko
#
# ===================================================================
def power(x, d):
    if d <= 0:
        for i in range(len(x)):
            x[i] = 0

    x = x[d:]           # x = [0,99,0]
    x = x + [0] * d     # x = [0,99,0,0,0]
    # mais manque un "return x"
    
power(z, 2)
print(z) # [0, 0, 0, 99, 0] au lieu de [ 0, 99, 0, 0, 0]

# ===================================================================
#
# objet mutable en paramètre
#
# ===================================================================
def func(a, L=[]):
	for i in range(a):
		L.append(i)
	return L

# premier appel, L est créée puis vaut [0,1]	
print(func(2))
# second appel, L n'est pas recréée donc L = [0, 1, 0, 1, 2]
print(func(3))

