当我说,
>>>radius = 2
在内部,在__main__模块的全局框架中创建一个名为radius的新对象,该对象的类为int.引用变量也由名称半径创建,该半径指向该对象.
当我说,
>>>from math import sqrt
在内部,在__main__模块的全局框架中创建一个名为sqrt的新对象,该对象属于类函数.引用变量也是由名称sqrt创建的,它指向函数类型的对象.
当我说,
>>>def square(x):
return mul(x,x)
在内部,在__main__模块的全局框架中创建一个名为square的新对象,该对象是类函数.引用变量也是由名称方形创建的,它指向函数类型的对象.
我的问题:
我的理解是否正确?
要么
radius和sqrt和square对象是在__main__模块的全局框架和参考变量(半径sqrt square)之外创建的,它们位于__main__模块的全局框架点内吗?
在CS61A 2012秋季课程中,老师说,这就是它,它看起来像隐藏了python程序内存模型的许多细节.
最佳答案 询问创建对象的位置与引用所在的位置有点没有实际意义.正如200 OK指出的那样,所有对象名称都是引用 – 没有一个名称比其他名称更规范或本地.对象只是存在(在私有堆上,虽然这对于所有意图和目的都无关紧要),并且名称指向它们.
也就是说,你的问题中有一个不太恰当的细微差别.从模块导入内容时 – 无论是整个模块本身,还是只是一个函数 – 对该模块的引用都存储在sys.modules dict中.这确保了当代码的另一部分从该模块导入时,它不会被重新导入;使用现有的导入版本.