python 中变量和对象

发布时间:2019-06-06 20:34:19编辑:auto阅读(1669)

    1. 

    在 python 中,类型属于对象,变量是没有类型的:
    a=[1,2,3]
     
    a="Runoob"
    以上代码中,[1,2,3] 是 List 类型,"Runoob" 是 String 类型,而变量 a 是没有类型,她仅仅是一个对象的引用(一个指针),可以是 List 类型对象,也可以指向 String 类型对象。
    可更改(mutable)与不可更改(immutable)对象
    在 python 中,strings, tuples, 和 numbers 是不可更改的对象,而 list,dict 等则是可以修改的对象。
    不可变类型:变量赋值 a=5 后再赋值 a=10,这里实际是新生成一个 int 值对象 10,再让 a 指向它,而 5 被丢弃,不是改变a的值,相当于新生成了a。
    可变类型:变量赋值 la=[1,2,3,4] 后再赋值 la[2]=5 则是将 list la 的第三个元素值更改,本身la没有动,只是其内部的一部分值被修改了。
    python 函数的参数传递:
    不可变类型:类似 c++ 的值传递,如 整数、字符串、元组。如fun(a),传递的只是a的值,没有影响a对象本身。比如在 fun(a)内部修改 a 的值,只是修改另一个复制的对象,不会影响 a 本身。
    可变类型:类似 c++ 的引用传递,如 列表,字典。如 fun(la),则是将 la 真正的传过去,修改后fun外部的la也会受影响
    python 中一切都是对象,严格意义我们不能说值传递还是引用传递,我们应该说传不可变对象和传可变对象。

     2.

    在 python 中,类型属于对象,变量是没有类型的。

    a=[1,2,3]
    
    a="Runoob"

    以上代码中,[1,2,3] 是 List 类型,"Runoob" 是 String 类型,而变量 a 是没有类型,她仅仅是一个对象的引用(一个指针),可以是 List 类型对象,也可以指向 String 类型对象。

     

    3.

    当你创建一个对象并给它赋一个变量的时候,这个变量仅仅引用那个对象,而不是表示那个对象本身!也就是说,变量名只是指向计算机中存储那个对象的内存。这被称作名称到对象的绑定。

    #!/usr/bin/python
    #-*- coding=utf-8 -*-
    
    print '-----------简单的赋值-----------'
    shoplist = ['apple','mango','carrot','banana']
    mylist = shoplist # 简单的赋值 只是引用变量名
    
    del shoplist[0]
    del mylist[0]
    
    print 'shoplist 列表:',shoplist
    print 'mylist 列表:',mylist
    
    print '完整切片是真正的复制:'
    
    mylist = shoplist[:]
    
    del mylist[0]
    
    print 'shoplist 列表:',shoplist
    print 'mylist 列表:',mylist

    输出结果为:

    -----------简单的赋值-----------
    shoplist 列表: ['carrot', 'banana']
    mylist 列表: ['carrot', 'banana']
    完整切片是真正的复制:
    shoplist 列表: ['carrot', 'banana']
    mylist 列表: ['banana']

    很明显,普通引用只是名称的绑定,而只有完整切片才是真正意义上的复制。所以我们在简单引用后一定要考虑是否可以更改,因为操作可能影响到源对象。

关键字

上一篇: 细说unittest-1

下一篇: day20-python之装饰器