美文网首页
为什么说python中所有的东西都是对象?

为什么说python中所有的东西都是对象?

作者: 复苏森林 | 来源:发表于2019-04-28 14:31 被阅读0次

    先来看看这段代码:

    a = 'ABC'
    b = a
    a = 'XYZ'
    print(b)
    

    这段代码执行的结果是ABC呢还是XYZ呢?
    答案是

    ABC
    

    这是为什么呢?
    很多教程都会告诉你,'ABC'是一个对象,把这个对象指向a,当b=a时,是把对象指向b,这点对于学过面向对象的同学来说会非常难以理解。

    在很多面向对象语言中,变量是可以指向另一个变量的地址的。变量在栈里,变量的值在堆里,一个变量所标记的存储空间,可以写成一个值,也可以写成一个内存空间的地址。这个特性确保了,引用对象可以在函数方法间传递。

    比如Java,如果 double a = 5000.0 ,5000.0会被直接存放在a变量的空间里,当将a赋值给b时,b会拷贝一份数据到自己的空间里,此时修改a不会影响b,修改b不会影响a。但是,如果写的是Double a = 5000.0,Double b = a,此时修改a或b,都会对另一个产生影响,因为这两个变量此时在自身空间中存储已经是一个引用地址了。类似于python当前的情况,但也不完全是。

    而python压根不支持这一点。在python当中,数据是数据,变量是变量,变量只能存放内存地址。任何一个数据出现时,都会自动放入数据区域,并给出一个内存地址,当你想要将这个数据赋给某个变量时,就会简单的将这块数据的内存地址存入变量,当你将一个变量赋值给另一个变量时,也就简单的拷贝变量中存储的地址即可。

    上述变量中存储的地址都是指数据的地址,不是变量本身的地址。

    我们来总结一下:
    python语言的变量只能存放数据块的内存地址,其他语言的变量不光可以存放内存地址,也可以直接存放普通数据类型。

    相关文章

      网友评论

          本文标题:为什么说python中所有的东西都是对象?

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