Bonjour à tout le monde,

J’ai un soucis avec un résultat inattendu lorsque j’exécute une fonction dans l’interpréteur.
Je dois passer à côté de quelque chose, je pense que c’est lié aux espaces de noms mais je ne comprends pas…

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
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
 
# -*- coding:Utf-8 -*-
 
a=9999
 
def monter():
    global a
    a=a+1
    print("a")
    print(a)
    print(id(a))
 
def setA():
    global a
    a=10
    print("a")
    print(a)
    print(id(a))
 
if __name__ == "__main__":
    print(globals())
    print("a")
    print(a)
    print(id(a))
    print("-------")
    print("setA")
    setA()
    print("-------")
    print("a")
    print(a)
    print(id(a))
    print("-------")
    print("monter")
    monter()
    print("-------")
    print("a")
    print(a)
    print(id(a))
    print("-------")
En exécutant le code (main), j’obtiens le résultat suivant (qui est correct):
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
23
24
 
{'__name__': '__main__', '__doc__': None, '__package__': None, '__loader__': <_frozen_importlib_external.SourceFileLoader object at 0x000001CF9F772640>, '__spec__': None, '__annotations__': {}, '__builtins__': <module 'builtins' (built-in)>, '__file__': 'test.py', '__cached__': None, 'a': 9999, 'monter': <function monter at 0x000001CF9FCC7CA0>, 'setA': <function setA at 0x000001CF9FCC7E50>}
a
9999
1991250639312
-------
setA
a
10
140704708233152
-------
a
10
140704708233152
-------
monter
a
11
140704708233184
-------
a
11
140704708233184
-------
La variable globale est bien modifiée.

Maintenant dans l’interpréteur:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
 
Python 3.8.6rc1 (tags/v3.8.6rc1:08bd63d, Sep  7 2020, 23:10:23) [MSC v.1927 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> from test import setA, monter, a
>>> print(globals())
{'__name__': '__main__', '__doc__': None, '__package__': None, '__loader__': <class '_frozen_importlib.BuiltinImporter'>, '__spec__': None, '__annotations__': {}, '__builtins__': <module 'builtins' (built-in)>, 'setA': <function setA at 0x0000018AC4F07EE0>, 'monter': <function monter at 0x0000018AC4F07E50>, 'a': 9999}
>>> print(a)
9999
>>> setA()
a
10
140704708233152
>>> print(a)
9999
La variable globale n’est pas modifiée. Pourquoi 999 et pas 10 ?

Merci d’avance pour votre aide