包和模块
包: package,在Python中包是用来包裹模块的文件夹,但并不是所有的文件夹就是包,在Python中包里面有一个__init__.py
注:包是文件夹,但文件夹不一定是包
模块:XXX.py
常见的导包方式: import package.module
import package.module as 别名
from package import module
from package1,package2,…… from module
from package import * 导入所有模块
is和==
都是用来判断变量的
is是用来判断两个变量的内存地址
==是用来判断两个变量的值
小整形缓存区(-5~256),当变量的取值在这个小整形缓存区范围内就不会在内存中开辟新的空间存储
字符串缓存区,但字符串不能包含特殊字符
深拷贝和浅拷贝
深拷贝: 引用复制(基本数据)——主要操作的是栈内的复制——变量。使用递归的方式完成拷贝
浅拷贝: 拷贝对象,对象是存储在堆中,拷贝的是堆内存。 只拷贝了对象的第一层
注:需要拷贝对象的时候,一般建议使用浅拷贝(一层:效率高,占用内存少),如果需要完全分离就是要深拷贝
不可变类型(元组、字符串、数值)浅拷贝和深拷贝永远只有一份
思考:元组元数是可变的(元素可以是列表),浅拷贝和深拷贝结果?
>>> a=(1,2,3,[4,5],6)
>>> b=copy.copy(a)
>>> id(b)
21188392
>>> id(a)
21188392
>>> c=copy.deepcopy(a)
>>> id(c)
21224976
生成器
列表推导式:
作用: 快速得到一个需要的列表
生成一个0~100的列表: 法一: ls=[0,1,2,3,4,……,100]
法二: ls=[x for x in range(101)]
带条件的: ls=[x for x in range(101) if x % 2 == 0]
循环套循环:[i*j for i in range(10) for j in range(10)]
循环套循环 问题:假设生成的列表特别多时,空间浪费就非常大,引起大量的元素占用空间
列表生成器: