Avec Python 2.72, j'ai voulu utiliser deux variables globales en float entre modules. A ma surprise, ça ne fonctionne pas, alors que pour une liste et un dictionnaire, c'est OK. Curieusement, l'initilisation (ici a_var = 1) est vue correctement des deux modules.
Exemple, le fichier a.py:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
 
a_var = 1   # globale, vraiment?
l = [1]     # global
 
def mod_var():
    global a_var, l
    print "vu de a, avant: %d, %d" %(a_var, l[0])
    a_var = 10
    l[0] = 10
    print "vu de a, apres: %d, %d" %(a_var, l[0])
Et le fichier b.py:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
 
import sys
from a import *
 
def mod_var2():
    global a_var, l
    a_var = 20
    l[0] = 20
 
def main(p):
    global a_var, l
    print "vu de b, avant mod_var a: %d, %d" %(a_var, l[0])
    mod_var()
    print "vu de b, apres mod_var: %d, %d" %(a_var, l[0])
    mod_var2()
    print "vu de b, apres mod_var2: %d, %d" %(a_var, l[0])
    print "fin"
 
# Starts here
if __name__ == '__main__':
    main(sys.argv )
#end main
Le résultat est le suivant:
vu de b, avant mod_var a: 1, 1
vu de a, avant: 1, 1
vu de a, apres: 10, 10
vu de b, apres mod_var: 1, 10
vu de b, apres mod_var2: 20, 20
fin
On voit donc clairement que la variable a_var est une copie dans le module b.py, bien que l'initialisation de a.py s'effectue, ce qui est trompeur!