variables, objets et types#

Python est fortement typé (eh oui!)#

ce qu’on a pu remarquer d’après le notebook précédent

  • on n’a jamais déclaré de variable (sauf, d’accord, les paramètres des fonctions)

  • a fortiori on n’a pas eu besoin de donner explicitement un type à nos variables

déclaration de variable#

en fait ce qui se passe avec Python c’est que

  • le simple fait d’affecter une variable, si elle est inconnue à cet endroit-là, constitue une déclaration

  • la variable est alors connue dans toute la fonction - ou tout le module si elle est définie au toplevel du module

variables non typées#

  • les variables ne sont pas typées; on peut parfaitement écrire par exemple

    a = "100"  # à ce stade a désigne une chaine
    a = int(a) # maintenant a désigne un entier !
    
  • bien sûr ce n’est pas forcément une pratique recommandée, mais c’est tout à fait possible en Python
    en tous cas c’est un exemple pédagogique pour les gens habitués aux langages compilés:
    il faut retenir que les variables ne sont pas typées

les objets sont tous typés#

par contre:

  • toutes les données que vous manipulez dans la mémoire en Python sont des objets

  • et chaque objet de la mémoire

    • possède un type - on peut y accéder avec type(object)

    • ce type ne changera plus jamais durant la durée de vie l’objet

# illustration

a = 10
type(a)
int
b = "une chaine"
type(b)
str
import math
type(math)
module
def hello(n):
    print(f"Hello {n}")
type(hello)
function
class Person:
    def __init__(self, name):
        self.name = name

# le type d'une classe, c'est quoi donc ?
type(Person)
type
# (très) avancé: à un moment ça s'arrête bien sûr
type(type) is type
True

objets mutables ou pas#

%load_ext ipythontutor

non mutable (par ex, un entier)#

le type int n’est pas mutable (immutable donc)
qu’est-ce que ça signifie ?
une fois l’objet créé, on ne peut plus le modifier

%%ipythontutor heapPrimitives=true

a = b = 1
a += 1
# le même objet ?
print(a is b)