from与import之间的区别

来源:互联网 发布:淘宝评价截图 编辑:程序博客网 时间:2024/05/13 22:07
实例:
模块foo.py的内容:
yuqiu@w1-01-11-0492:~$ cat foo.py
#!/usr/bin/python
# Filename: foo.py

bar='hello'
print bar

先用from导入模块:
>>> from foo import bar
hello  #说明模块已经被执行了一次,from和import都会对模块里的语句执行一遍
>>> bar
'hello'  #从模块里导入的内容
>>> bar='yuqiu' #对变量重新赋值

再用import导入模块:

>>> import foo  #第二次导入该模块,模块不会再执行,而是从内存里加载数据
>>> foo.bar
'hello'  #为什么boo.bar的值不是‘yuqiu’呢?
原因:
from导入模块的过程:
1、寻找模块foo的位置;
2、将foo源代码编译成字节码(根据需要)
3、执行字节码
执行字节码的过程
foo.bar='hello'
bar=foo.bar  #此时‘hello’字符串对象便有两个引用计数
delete foo
对bar重新赋值后bar='yuqiu',bar会引用到另外一个字符串对象'yuqiu'
import foo #再次导入模块
foo.bar会从内存中读取,所以foo.bar的值为'hello'