Python局部变量和全局变量修改

Python对变量进行修改只是更改了变量所指向的地址

1.不可变对象(数字,字符串,元组)

python对不可变对象这种类型的变量进行修改的时候只能更改该变量指向的地址,因为对于不可变变量,创建以后变量的内容就固定在某一个地址了,这个地址的内容是不能更改的,因为如果有其他变量想要存储相同的内容时我们可以直接让该变量也指向同一个地址就行,可以节省内存。当我们对不可变对象重新赋值的时候就相当于让这个变量指向另一个地址。

而在函数内部,当我们想要修改一个外部的不可变对象变量时,是无法直接进行重新赋值的,因为函数内部没有权限直接修改外部变量的指向,如果我们在函数内部直接对外部的变量进行赋值,实际上是创建了一个局部变量,外部变量的内容是没有更改的,如果后面有被调用,那么访问的也是这个局部变量的内容。如果函数内部没有对外部变量的赋值语句,那么函数内部是可以直接访问外部变量的,也就是可以查看外部变量的值,但是如果在函数内部先有一句调用外部变量的语句,后面又有一句修改外部变量的语句的话,这个变量就会被认为是局部变量,所以在执行前面那句调用的语句的时候就会报错,说未定义,这是因为这个局部变量是在后面创建的(也就是我们想用来修改外部变量的这一句)。


2.可变对象(列表,字典)

当我们创建一个可变对象的时候,会在内存里面重新开辟一个空间,存放这个列表或者字典里面元素的地址,我们每次直接给这个变量整体重新赋值(不是通过下标改变里面的元素,而是直接通过变量名重新赋值),都会重新开辟一个空间,就算我们这次赋的值和原来的值一样,也会重新开辟一个空间,我们可以把一个可变对象反复赋予相同的值,然后每次查看一下这个变量的id,会发现每次都不一样。


3.函数内部如何更改外部变量

方法一:在函数内部通过global关键字声明这是个全局变量,这就相当于拿到尚方宝剑了,就可以在函数内部直接更改这个全局变量的指向。

方法二:使用返回值,在调用函数的地方把返回值传递给原变量。

你可能感兴趣的:(Python局部变量和全局变量修改)