闲逸笔记

keep it simple & stupid

Python 之参数传递与变量赋值

这两天在翻看《改善Python程序的91个建议》,里面讲到了关于参数传递的细节。感觉讲的有些复杂了,总结下自己的理解。

基本结论

  • Python 中一切皆是 object,参数传递的都是 object 的地址。

  • 不仅参数传递,变量赋值亦是如此。

特殊情况

  • 不可变对象(数字、字符串、tuple,都属于 immutable 的对象),对指向他们的变量进行修改的时候,是创建新的对象然后赋值的。

    a = 100
    print id(a)   # 24947172
    
    a = a + 1
    print id(a)   # 24947160,创建了一个新的数字 object 给 a
    
  • 数字、字符串对象存在一个缓冲池,内容相同的对象储存于同一地址。

    a = 3.1415926
    b = 3.1415926
    print id(a)   # 21833896
    print id(b)   # 21833896
    
    a = "hello world!!"
    b = "hello world!!"
    print id(a)   # 30428920
    print id(b)   # 30428920
    
  • 函数的参数默认值在函数初始化时就已申请分配了内存空间,后面不再重新申请分配。

    def fun(arg1=[1, 2]):
        arg1.append(3)
        print arg1
    
    fun()   # [1, 2, 3]
    fun()   # [1, 2, 3, 3]
    fun()   # [1, 2, 3, 3, 3]
    

版本信息

  • Python 2.7.9

Permalink [http://sleepycat.org/blog/38]


发表评论

top bottom