Python基础
1. 关于对象
对象在内存中的存储保存了三个数据
- id(标识)即内存地址,相当于C语言的指针
- type(类型)即数据类型,int、str、bool、float等
- value(值) 即对象存储的内容,就是值
2. 可变对象与不可变对象
- 不可变类:bool、int、float、tuple、str、frozenset(不可变集合类)----内存地址指向值不可修改,只能新增内存地址来储存新值
- 可变类: list、 set、 dict ----可在同一个内存地址去修改值
(1). 整型 123,字符串 hello 在内存中的数据结构
(2). 将对象赋值给变量就相当于将对象的值设定为对象的id,即内存地址,也就是指针
(3). 可变对象内存地址不变(0x111)
a = [1, 2, 3]
b = a
a[0] = 2
(4). 可变对象内存地址改变(0x111 --> 0x211)
a = [1, 2, 3]
a[0] = 2
a = [4, 5, 6]
3. 深浅拷贝
- 浅拷贝在拷贝时,只拷贝第一层中的引用,如果元素是可变对象,并且被修改,那么拷贝的对象也会发生变化。
- 深拷贝在拷贝时,会逐层进行拷贝,直到所有的引用都是不可变对象为止。
- Python 有多种方式实现浅拷贝,copy 模块的 copy 函数 ,对象的 copy 函数 ,工厂方法,切片等。
- 大多数情况下,编写程序时,都是使用 浅拷贝,除非有特定的需求。
- 浅拷贝的优点:拷贝速度快,占用空间少,拷贝效率高。
- id() 用来查看内存地址; is 可判断内存地址是否相同
- 拷贝的只是指针,而不是内存数据块。
- 数值相同,一般内存地址也相同,不会浪费资源。
3.1 引用
3.2 浅拷贝
3.3 深拷贝
4. 大O符号
4.1 时间复杂度
- ------>
常数 | 对数 | 线性 | nlog n | 二次 | 三次 | 指数 |
---|---|---|---|---|---|---|
1 | log n | n | nlog n | n² | n³ | aⁿ |
4.2 空间复杂度
5. 文件操作
- Python中用于文件目录操作的常用模块有os, shutil, pathlib等
5.1 获取系统信息
# 获取平台名称. 注意这个不是函数,所以不需要带括号()
# Windows 对应 'nt';Linux/Unix 对应 'posix'
os.name
# 获取系统的核心数
os.cpu_count()
# 改变权限
os.chmod(path, mode)
5.2 目录与路径
# 获取路径和文件名等
os.getcwd() #函数得到当前工作目录,即当前Python脚本工作的目录路径
os.path.abspath($name) #当前目录下文件或文件夹的绝对路径
os.path.basename(path) #返回文件名
os.path.dirname(path) #返回文件的上级路径
os.path.split() #分离文件名和上级路径
os.path.join() #合并文件名和指定路径
os.path.splitext() #分离文件名与扩展名,返回的扩展名包括了'.'符号,默认只返回第一个'.后缀'和前缀。
# 改变工作目录到dirname
os.chdir(dirname)
# 该函数相当于linux命令“ls”
# 列举出指定目录中的内容。其返回值是一个列表。列表中的每一格元素表示一个子目录名,或者一个文件名
os.listdir(path)
# 创建一个目录
os.mkdir(path)
# 删除一个目录
os.rmdir(path)
# 重命名
os.rename(src, dst)
# 获取文件大小信息
os.path.getsize(name) #获得文件大小,如果name是目录返回0L
#函数分别检验给出的路径是一个文件?
os.path.isfile()
#函数分别检验给出的路径是一个目录?
os.path.isdir()
#函数用来检验给出的路径是否真地存在
os.path.exists()
# 删除一个文件
os.remove()
# 删除一个文件
os.unlink()
# 删除一个空目录,如果不是空目录会报错
os.rmdir()
# 删除目录,包括其中的文件以及子目录,需要小心使用
shutil.rmtree()
# 删除文件
pathlib.Path.unlink()
# 删除空文件夹
pathlib.Path.rmdir()
#拼接或分离路径文件
#与直接字符串连接不同的是,'D:/tmp'即可,不需要'D:/tmp/'
os.path.join('D:/tmp','tmp.txt')
# 返回路径的目录和文件名,即将目录和文件名分开,而不是一个整体。此处只是把前后两部分分开而已。就是找最后一个'/'。
os.path.split(path)
5.3 执行shell命令
os.system(cmd) #执行外部shell命令。
5.4 文件操作
# shutil会自动识别拷贝的到底是文件还是文件夹, 如果存在同名的文件将会自动进行覆盖
shutil.copy($file_path, $dir_path)
shutil.move($file_path, $dir_path) # 移动到另外一个文件夹中
shutil.move($file_path, $new_file_path) # 重命名为新的绝对路径
shutil.copytree($file_path, $dir_path) # 拷贝所有文件到新的文件夹下,保持原有的文件结构。
shutil.rmtree($dir_path) # 删除此路径的文件夹
# 生成压缩文件
shutil.make_archive(base_name, format, root_dir, base_dir)
# base_name : 创建的目标文件名,包括路径,减去任何特定格式的扩展。
# format : 压缩包格式。”zip”, “tar”, “bztar”或”gztar”中的一个。
# root_dir : 需要打包的文件夹路径。打包完成时存储在上一级目录。
# base_dir : 使用后会将base_dir作为路径,解压后有个有层级的文件夹,而仅非只有单独的打包内容。
# 解压文件
shutil.unpack_archive(filename, extract_dir, format)
# filename是压缩文档的完整路径
# extract_dir是解压缩路径,默认为当前目录。
# format是压缩格式。默认使用文件后缀名代码的压缩格式。”zip”, “tar”, “bztar”或”gztar”中的一个。