import re
value = eval("'Hello「World」'")
c = [
    "g = re.search('.*「(.*)」', value, re.IGNORECASE)",
    "print(value)",
    "value = g.group(1)",
    "print(value)"
]
if c is not None:
    for d in c:
        exec(d)
def test():
    value2 = eval("'Hello「World」'")
    c2 = [
        "g2 = re.search('.*「(.*)」', value2, re.IGNORECASE)",
        "print(value2)",
        "value2 = g2.group(1)",
        "print(value2)"
    ]
    if c2 is not None:
        for d2 in c2:
            exec(d2)
test()
Expect result:
Hello「World」
World
Hello「World」
World
Actual result:
Hello「World」
World
Hello「World」
Hello「World」
I am running in Python 3.6.2. My question is why cannot exec set the value when it is inside the function?
However, it can set on a new variable.
def test2():
    value2 = eval("'Hello「World」'")
    c2 = [
        "g2 = re.search('.*「(.*)」', value2, re.IGNORECASE)",
        "print(value2)",
        "value3 = g2.group(1)",
        "print(value3)"
    ]
    if c2 is not None:
        for d2 in c2:
            exec(d2)
test2()
Result:
Hello「World」
World
Hello「World」
World
How can I make test() change value2 inside exec?