有关Python的import...和from...import...的区别

本文详细解析了Python中import和from...import...导入模块的语法和内存行为差异。from...import...导入时在内存中创建模块副本,不共享,而import...则共享模块,可能影响原模块。在多程序导入同一模块并需要修改时,from...import...更为合适。总结来说,根据内存使用和模块修改需求选择导入方式。
摘要由CSDN通过智能技术生成

1、语法分析:

首先 from A import a1 是从A模块导入a1工具(可以是某个 函数,全局变量,类);
import A 是导入整个A模块的全部内容(包括全部的函数,全局变量,类)。

2、内存分析:

(1) from…import… 会在内存中创建并加载该模块工具的副本,当有另外一个程序导入时,会在内存中创建另一个副本进行加载,不会共用一个副本。所以程序进行的修改不会影响到被导入的原模块,且不同程序之间不会互相影响

(2) import…方法导入模块会在内存中直接加载该模块的全部属性。当出现多个程序导入该模块时,会共用一个模块,程序之间会互相影响,包括原模块

图文解释:

(1)创建基础模块

#a.py
data=[1,2,3]
 
def run():
    print(data)

(2)from…import…导入模块,控制台输出

#b.py
from a import run,data
 
 
data[0]=5 #类似赋值,b里面的data和a里面的data指向同一个对象,这么做对两者都有影响
print(data) #输出[5,2,3] 
run()#输出[5,2,3]
 
data=100 #由于直接改变了data的指向,所以不会影响源模块a
print(data) #输出100
run()#输出[5,2,3]

(3)import…导入模块,控制台输出

#c.py
import a
#由于是直接import a 所以都是从源模块a里面拿出来的,所以这里的改变都会影响源模块a
#可以理解为有着作用域 a.的限制
a.data[0]=5 
print(a.data) #输出[5,2,3]
a.run() #输出[5,2,3]
 
a.data=100 #因为这里影响的是a里面的data
print(a.data) #输出100
a.run() #输出100

3、from … import * 属于from … import … 只不过是加载了模块的全部属性。

4、总结

当多个程序需要同时导入一个模块并且都是访问时,使用import 可以节省内存空间

当多个程序需要同时导入一个模块当其中一个需要修改模块,那么修改的模块的程序应该使用from来导入模块.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值