python中的变量和对象

文章标题:Python学习笔记(五)Python动态类型和引用

文章链接:http://blog.csdn.net/suipingsp/article/details/39295295

文章标题:Python函数参数默认值的陷阱和原理深究
文章链接:http://cenalulu.github.io/python/default-mutable-arguments/

因为自己对于python中的引用类型有些混,加之看到了上面的文章中的链接,有了一些想法,就写了下来。

if __name__ == "__main__":
    a = 3  # 赋值操作
    # 创建了一个对象,这个对象是一个int对象,这个int对象的值为3,
    # (如果变量a尚未被创建的话),创建了一个变量a,
    # 将变量a和int对象(其值为3)关联起来.此时,变量a指向了内存中的一个int对象(其值为3)
    a *= 2  # 乘法运算+赋值操作
    # 创建了一个int对象(其值为2),
    # 找到变量a指向的对象(int对象,其值为3),
    # (乘法运算)将int对象(其值为3)和int对象(其值为2)做乘法运算,得到(创建出了)一个新的int对象(其值为6),
    # (赋值操作)将变量a和这个新的int对象(其值为6)关联起来.此时,变量a指向了内存中的一个int对象(其值为6)
    a = "qwert"  # 赋值操作
    # 创建了一个对象,这个对象是一个str对象,这个str对象的值为"qwert"
    # 将变量a和str对象(其值为"qwert")关联起来.此时,变量a指向了内存中的一个str对象(其值为"qwert")
    b = a  # 赋值操作
    # (如果变量b尚未被创建的话),创建了一个变量b,
    # 将变量b和"变量a指向的对象"关联起来,此时变量a和变量b指向了内存中的同一个对象
    b = b + "123"  # 加法运算+赋值操作
    # 找到变量b指向的对象(str对象,其值为"qwert")
    # 将str对象(其值为"qwert")和str对象(其值为"123")做str.__add__运算,得到一个新的str对象(其值为"qwert123")
    # 将变量b和这个新的str对象(其值为"qwert123")关联起来.
    # 此时,变量b指向了内存中的一个str对象(其值为"qwert123"),变量a指向了内存中的另一个str对象(其值为"qwert")
    a = [1, "str"]
    # 创建了一个list对象,其值为[1, "str"],
    # 将变量a指向内存中的一个list对象(其值为[1, "str"]),
    b = a
    # 将变量b和"变量a指向的对象"关联起来,此时变量a和变量b指向了内存中的同一个对象
    b.append("obj")
    # 找到变量b指向的对象(list对象,其值为[1, "str"])
    # 调用这个对象的append方法,将str对象(其值为"obj")添加到这个对象里面.此时,这个对象因为append方法该变了自己,这个list对象变成了[1, "str", "obj"]
    # 因为变量a和变量b指向了同一个对象,但是这个对象被(自己的成员函数)改变了,
    # 所以,变量a改变了,(变量a指向的内存中的对象改变了)
    # 所以,变量b改变了,(变量b指向的内存中的对象改变了)
    print(b)  # [1, 'str', 'obj']
    print(a)  # [1, 'str', 'obj']
    # 创建了一个对象,这个对象的值,在创建之后,绝对不会再被改变,这样的类有int,float,str,等
    # 创建了一个对象,这个对象还可以被自己的成员函数改变,这样的类有list,dict,array,bytearray,等,超级多,
    # 对于tuple,一个tuple被创建出来之后,它里面的那些个item不可以增加和减少了,但是item自身是可以被自己的数据成员改变的,
    testTuple = (1, "str", [3.14, True, None], bytearray("qwert", encoding="utf_8"))
    print("初始化后的tuple=", testTuple, sep="")
    try:
        testTuple[0] = 3
    except TypeError as e:
        print(e)
    finally:
        pass
    testTuple[2].append("obj")
    testTuple[3].append(49)
    print("修改后的tuple=", testTuple, sep="")
    import sys
    sys.exit(0)

完。

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值