1、变量的修改数据结构
咱们都知道,在程序中根据变量的做用域的不一样能够把变量分为全局变量与局部变量。在函数中的变量若是没有特别声明即便变量名与全局变量名彻底一致也不会对全局的变量产生影响,以下面这个例子所示:函数
因为做用域的不一样,在函数中不通过特殊声明是不会改变全局变量“name”的值的。要想在函数的做用域中修改全局变量,咱们能够利用global关键字:spa
如上图所示,经过global关键字咱们能够在函数这个局部做用域中修改全局变量。对象
2、列表的修改blog
对于列表,咱们进行这样的操做:内存
(1)以下图:作用域
一样,若是咱们直接进行修改list1中的内容仍是不行。只有在函数中利用global关键字声明后才能修改全局变量:字符串
(2)可是,若是咱们进行下面这样的修改:容器
当咱们在函数中给列表后面追加一个数字6后,最终打印出来的list1里面居然有函数中追加的结果!咱们再来进行其余的操做试试:变量
咱们居然也能在函数这个局部做用域中进行元素的删除操做!
其实,从占内存的角度讲,列表自己的内存地址与列表中的元素的内存地址是不同的。对于列表而言,列表自己只是一个元素的容器,它与里面的元素毫无关系。就比如箱子与货物的关系同样,货物装到箱子里是为了处理起来方便,而它与箱子自己没有任何关系。
这下你们应该清楚了,当咱们试图去修改列表的时候,程序会将列表以及列表中的元素看作是一个总体“变量”,它们的处理符合全局变量与局部变量的逻辑;而咱们要改变列表中具体元素的时候程序会在内存中独立为列表中的元素建立或者删除空间,与这个元素以及列表所在的做用域没有关系。
其实,对于列表、字典、集合这样的数据结构以及类、对象中的元素咱们均可以在函数中修改;而对于数字、字符串这样的数据类型只有在函数中利用global关键字声明后才能对全局变量进行修改!