面试系列之Python基础

7 篇文章 1 订阅
3 篇文章 0 订阅

1. 关于对象

对象在内存中的存储保存了三个数据

  • id(标识)即内存地址,相当于C语言的指针
  • type(类型)即数据类型,int、str、bool、float等
  • value(值) 即对象存储的内容,就是值

2. 可变对象与不可变对象

  • 不可变类:bool、int、float、tuple、str、frozenset(不可变集合类)----内存地址指向值不可修改,只能新增内存地址来储存新值
  • 可变类: listsetdict ----可在同一个内存地址去修改值
    (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二次三次指数
1log nnnlog naⁿ

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”中的一个。
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值