1、作用域的类型
• L(local)局部作用域
○ 函数内的命名空间
• E(enclosing)嵌套作用域
○ 外部嵌套函数的命名空间
• G(global)全局作用域
○ 所在模块(文件)的命名空间
• B(built-in)内置作用域
○ Python内置模块的命名空间
2、搜索变量名的优先级:
局部作用域 > 嵌套作用域 > 全局作用域 > 内置作用域
3、global与nonlocal关键字
• global适用于函数内部修改全局变量的值
• nonlocal适用于嵌套函数中内部函数修改外部变量的值
4、python针对变量的内存管理机制
id()函数
每个对象各有多少个引用,简称引用计数
这个对象的引用计数变为0时,它通常会被垃圾回收
5、浅拷贝和深拷贝
copy.copy与copy.deepcopy,分别表示浅拷贝与深拷贝。
• 浅拷贝: 不管是多么复杂的数据结构,浅拷贝只会拷贝第一层.
• 只拷贝内存地址 不拷贝内容。
• 深拷贝会完全复制原变量的所有数据(递归),在内存中生成一套完全一样的内容,我们对这两个变量中的一个进行任意修改都不会影响另一个变量。
6、==和is运算符的区别
== 比较的是两个对象的内容是否相等,即内存地址可以不一样,内容一样就可以了。
is 比较的是两个实例对象是不是完全相同,它们是不是同一个对象,占用的内存地址是否相同。
7、迭代器
1. 可迭代对象
通过for...in...这类语句迭代读取一条数据供我们使用的对象称之为可迭代对象(Iterable)
2、可迭代对象包括:
§ 列表、字典、集合、字符串等数据类型。
§ 数字类型不可迭代
§ 可以使用 isinstance() 判断一个对象是否是 Iterable(可迭代) 对象:
3. 可迭代对象的本质
§ 可迭代对象通过__iter__方法向我们提供一个迭代器,
一个具备了__iter__方法的对象,就是一个可迭代对象。
4. iter()函数与next()函数
§ iter()函数实际上就是调用了可迭代对象的__iter__方法。(本质)
5.可以使用isinstance()判断一个对象是否是iterator对象
6. 迭代器Iterator
§ 一个实现了__iter__方法和__next__方法的对象,就是迭代器。
7. 除了for循环能接收可迭代对象,list、tuple等也能接收
8、生成器
§ 生成器是一类特殊的迭代器
§ 使用了yield的函数就是生成器
§ yield关键字有两点作用:
□ 保存当前运行状态(断点),然后暂停执行,即将生成器(函数)挂起
□ 将yield关键字后面表达式的值作为返回值返回,此时可以理解为起到了return的作用