作用域

  1. 一切作用域都以代码块为单元

代码块可以是 模块文件;函数体;class 定义; 交互式每行的命令; 脚本文件; 脚本命令; eval() and exec()

  1. 函数的声明过程中,所有涉及到变量i的作用域内都不会对i进行赋值,仅仅只是保存了这个i变量名,只有在调用函数的时候才会进行赋值操作。

  2. Python 在启动的时候就在内存中预先为常用的较小整数值(-5到256)创建好了对象

  3. 函数的默认参数是在函数声明时进行赋值的

  4. Python 是词法作用域

  • 词法作用域是关联在编译期间的,对于函数来说就是函数的定义文本段的位置决定这个函数所属的范围。
  • 动态作用域是关联在程序执行期间的,对于函数来说就是函数执行的位置决定这个函数所属的范围。

赋值是对象引用

可变对象: 列表、字典、集合 在赋值时,修改一个的值,另一个也会发生改变

不可变对象:数字、字符串、元组 在赋值时会开辟新空间

深、浅拷贝对不可变对象拷贝时,不开辟新空间,相当于赋值操作

浅拷贝在拷贝时,只拷贝第一层中的引用,如果元素是可变对象,并且被修改,那么拷贝的对象也会发生变化

深拷贝在拷贝时,会逐层进行拷贝,直到所有的引用都是不可变对象为止。

Python 中有多种方式实现浅拷贝,copy模块的copy 函数 ,对象的 copy 函数 ,工厂方法,切片等。

浅拷贝的优点:拷贝速度快,占用空间少,拷贝效率高