1、类的浅拷贝与深拷贝
变量的赋值 *** 作:只是形成两个变量,实际上还是指向同一个对象
浅拷贝:python拷贝一般都是浅拷贝,拷贝时,对象包含的子对象内容不拷贝,因此,源对象与拷贝对象会引用同一个子对象
深拷贝:使用copy模板的deepcopy函数,递归拷贝对象中包含的子对象,源对象和拷贝对象所有的子对象也不相同
eg:
class Cpu:
pass
class Disk:
pass
class Computer:
def __init__(self,cpu,disk):
self.cpu=cpu
self.disk=disk
#变量的赋值
cpu1=Cpu()
cpu2=cpu1
print(cpu1,id(cpu1))
print(cpu2,id(cpu2))
print('------------------------')
disk1=Disk()
print(disk1,id(disk1))
computer1=Computer(cpu1,disk1)
print(computer1,computer1.cpu,computer1.disk)
import copy
computer2=copy.copy(computer1)
print(computer2,computer2.cpu,computer2.disk)
print('------------深拷贝------------')
computer3=copy.deepcopy(computer1)
print(computer3,computer3.cpu,computer3.disk)
浅拷贝只换id,深拷贝全部都换
2、模块(modules)
函数与模块的关系:一个模块中可以包含N多个函数
一个扩展名为.py的文件就是一个模块
使用模块的好处:
方便其他程序和脚本的导入并使用;
避免函数名和变量名冲突;
提高代码的可维护性;
提高代码的可重用性
3、模块的导入
创建模块:新建.py文件,名称尽量不要与python自带的标准模块名称相同
导入模块:
import 模块名称 [as别名]
from 模块名称 import 函数/变量/类
eg:
calc.py
def add(a,b):
return (a+b)
def div(a,b):
return (a/b)
demo.py
import calc
print(calc.add(10,30))
4、以主程序方式运行
在每个模块的定义中都包括一个记录模块名称的变量__name__,程序可以检查该变量,以确定他们在哪个模块中执行,如果一个模块不是被导入到其他程序中执行,那么它可能在解释器的顶级模块中执行,顶级模块的__name__变量的值为__main__
if __name__='__main__':
pass
5、python中的包
包是一个分层次的目录结构,它将一组功能相近的模块组织在一个目录下
作用:代码规范,避免模块名称冲突
包与目录的区别:
包含__init__.py文件的目录称为包;目录里通常不包含__init__.py文件
包的导入:import 包名.模块名
import只可以导入包和模块,但from..import...可以导入包,模块,变量名
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)