Отличаются ли области переменных для строк и списков? Списки могут быть изменены в функции без указания глобальной переменной, строки не могут - PullRequest
0 голосов
/ 26 октября 2019

Если я изменяю строку в функции, изменение не сохраняется вне функции

def f():  
    s="Me too."

    print( s )

s="I love Geeksforgeeks" 
f() 
print(s)

>Me too. 
>I love Geeksforgeeks

Но если я делаю это в списке, изменение сохраняется

s=[]
def f():  
    s.append("Me too.")

    print( s )

s.append("I love Geeksforgeeks" )
f() 
print(s)

>['I love Geeksforgeeks', 'Me too.']
>['I love Geeksforgeeks', 'Me too.']

Отличаются ли области видимости переменных для разных типов переменных?

Ответы [ 2 ]

1 голос
/ 26 октября 2019

Вы определяете список глобально, никогда не переопределяя это определение.

Вы определяете строку внутри функции, поэтому она невидима в глобальной области видимости.

1 голос
/ 26 октября 2019

Эти случаи не эквивалентны: в первом случае вы объявляете s и присваиваете ему значение внутри области действия функции (которая «скрывает» s от глобальной области видимости), а во втором случаевы объявляете s перед функцией, внутри функции вы не объявляете ее снова (которая «переопределит» ее внутри области действия функции), а вместо этого начинаете использовать ее, вызывая .append, поэтому вместо создания локальнойпеременная s, которая указывает на новый список - вы используете s из глобальной области видимости.

...