美文网首页
python可变类型与不可变类型

python可变类型与不可变类型

作者: 数据工程师从入门到放弃 | 来源:发表于2018-12-13 20:53 被阅读0次

    python可变类型与不可变类型

    [TOC]

    不可变类型

    #不可变类型
    
    int,string,float,tuple
    
    def int_test(): 
        i = 77
        j = 77
        print(id(77))                  #140396579590760
        print('i id:' + str(id(i)))      #i id:140396579590760
        print('j id:' + str(id(j)))      #j id:140396579590760
        print i is j                    #True
        j = j + 1 #此时 已经新开辟了内存区间
        print('new i id:' + str(id(i)))  #new i id:140396579590760
        print('new j id:' + str(id(j)))  #new j id:140396579590736
        print i is j                    #False
    
    if __name__ == '__main__':
        int_test()
    
    作者:炸鸡叔
    链接:https://www.jianshu.com/p/c5582e23b26c
    來源:简书
    简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。
    

    因为int类型是不可变类型,所有其实是j复制了一份到新的内存地址然后+1,然后j又指向了新的地址。所以j的内存id发生了变化

    image

    可变类型

    dict,list
    
    def dict_test():
        a = {}
        b = a
        print(id(a))
        b['a'] = 'hhhh'
        print('id a:' + str(id(a)))
        print('a:' + str(a))
        print('id b:' + str(id(b)))
        print('b:' + str(b))
    
    if __name__ == '__main__':
        dict_test()
    
    
    140367329543360
    
    id a:140367329543360
    
    a:{'a': 'hhhh'}
    
    id b:140367329543360
    
    b:{'a': 'hhhh'}
    
    
    image

    python函数参数传递

    由于python规定参数传递都是传递引用,也就是传递给函数的是原变量实际所指向的内存空间

    当传过来的是可变类型(list,dict)时,我们在函数内部修改就会影响函数外部的变量。

    而传入的是不可变类型时在函数内部修改改变量并不会影响函数外部的变量

    即为什么函数默认参数要用元组而非列表

    
    def test(a_int, b_list):
        a_int = a_int + 1
        b_list.append('13')
        print('inner a_int:' + str(a_int))#6
        print('inner b_list:' + str(b_list))#[10,11,'13']
    
    if __name__ == '__main__':
        a_int = 5
        b_list = [10, 11]
    
        test(a_int, b_list)
    
        print('outer a_int:' + str(a_int))#5
        print('outer b_list:' + str(b_list))#[10,11,'13']
    
    

    相关文章

      网友评论

          本文标题:python可变类型与不可变类型

          本文链接:https://www.haomeiwen.com/subject/escihqtx.html