Python中的变量/引用/拷贝

本文最后更新于2015年7月26日,已超过 1 年没有更新,如果文章内容失效,还请反馈给我,谢谢!

=Python中的变量和引用=

在 Python 中赋值语句总是建立对象的引用值,而不是复制对象。因此,Python 变量更像是指针,而不是数据存储区域。

py_var_assignment

在Python中,对象分为两种:可变对象不可变对象,不可变对象包括int,float,long,str,tuple等,可变对象包括list,set,dict等。需要注意的是:这里说的不可变指的是值的不可变。对于不可变类型的变量,如果要更改变量,则会创建一个新值,把变量绑定到新值上,而旧值如果没有被引用就等待垃圾回收。另外,不可变的类型可以计算hash值,作为字典的key。可变类型数据对对象操作的时候,不需要再在其他地方申请内存,只需要在此对象后面连续申请(+/-)即可,也就是它的内存地址会保持不变,但区域会变长或者变短。

参考链接:
Python中函数参数的传递方式,值传递 or 引用传递?

简要的说:都不是(和传统的C/C++中的值传递、引用传递都不一样),是”call-by-object”。

搜索关键字:

python How are arguments passed

参考链接:
Python中变量的作用域
参考解答:

变量分为三个作用域进行查找:首先是本地(Local),然后是函数内(如果有的话)(Enclosing),之后是全局(Global),最后是内置(Built-in)。在默认情况下,变量名赋值会创建或者改变本地变量。全局声明将会给映射到模块文件内部的作用域的变量名赋值。Python 的变量名解析机制也称为 LEGB 法则,具体如下:

当在函数中使用未确定的变量名时,Python搜索4个作用域:本地作用域(L),之后是上一层嵌套结构中 def 或 lambda 的本地作用域(E),之后是全局作用域(G),最后是内置作用域(B)。按这个查找原则,在第一处找到的地方停止。如果没有找到,Python 会报错。

参考链接:
=浅拷贝&深拷贝=
搜索关键字:
  • python list copy a[:]
  • python list copy list slice
参考链接:
参考解答:

=EOF=

声明: 除非注明,ixyzero.com文章均为原创,转载请以链接形式标明本文地址,谢谢!
https://ixyzero.com/blog/archives/2397.html

发表评论

电子邮件地址不会被公开。 必填项已用*标注