有一段python代码
test.py
-
# -*- coding: gbk -*-
-
-
def f(dictVar):
-
print "赋值前 dictVar:",dictVar
-
dictVar = {"key2":"value2"}
-
print "赋值后 dictVar:",dictVar
-
-
if __name__ == "__main__":
-
dictVar = {"key1":"value1"}
-
print "调用函数前 dictVar:", dictVar
-
-
print "调用函数"
-
-
f(dictVar)
-
-
print "调用函数后 dictVar:", dictVar
运行结果如下:
解释:
在main模块里面的变量dictVar与fun函数里面的变量dictVar是两个不同的变量,由于他们的名字相同,所以很容易混淆,认为他们是同一变量。
-
dictVar = {"key1":"value1"} //将dict指向{“key1”:”value1”}对象
其实python里面的一个变量就是PyObject
*的指针变量,可以指向任意类型的对象。
-
dictVar = {"key2":"value2"}
对dictVar赋值,使其指向了{“key2”:”value2”}对象,__main__模块的dictVar变量,其指向的对象则不变。
退出fun函数后,局部变量dictVar被释放,恢复主模块的作用域,dictVar仍然指向{“key1”:”value1”}
关于python对象的理解
test2.py
-
# -*- coding: gbk -*-
-
-
def f(dictVar):
-
print "赋值前 dictVar:",dictVar
-
dictVar.update({"key2":"value2"})
-
print "赋值后 dictVar:",dictVar
-
-
if __name__ == "__main__":
-
dictVar = {"key1":"value1"}
-
print "调用函数前 dictVar:", dictVar
-
-
print "调用函数"
-
-
f(dictVar)
-
-
print "调用函数后 dictVar:", dictVar
以上代码的执行结果是:
dictVar.update({
"key2":
"value2"})是在{“key1”:”value1”}dict对象上操作的,dictVar在同一对象上操作,所以该对象的值改变了。
阅读(4047) | 评论(0) | 转发(2) |