zoukankan      html  css  js  c++  java
  • Python id() 函数

    x=2
    print(id(2))
    print(id(x))
    y='hello'
    print(id('hello'))
    print(id(y))

    2022139072
    2022139072
    55049600
    55049600


    '''
    在Python中一切皆对象,像2,'hello'这样的值都是对象,只不过5是一个整型对象,而'hello'是一个字符串对象。

    上面的x=2,在Python中实际的处理过程是这样的:

    先申请一段内存分配给一个整型对象来存储整型值2,然后让变量x去指向这个对象,实际上就是指向这段内存(这里有点和C语言中的指针类似)。

    而id(2)和id(x)的结果一样,说明id函数在作用于变量时,其返回的是变量指向的对象的地址。因为变量也是对象,所以在这里可以将x看成是对象2的一个引用。

    原文链接:https://blog.csdn.net/tycoon1988/article/details/38850443
    '''

    x=2
    print(id(x))
    y=2
    print(id(y))
    s='hello'
    print(id(s))
    t=s
    print(id(t))

    2022139072
    2022139072
    64788352
    64788352

    从运行结果可以看到id(x)和id(y)的结果是相同的,id(s)和id(t)的结果也是相同的。这说明x和y指向的是同一对象,而t和s也是指向的同一对象。x=2这句让变量x指向了int类型的对象2,而y=2这句执行时,并不重新为2分配空间,而是让y直接指向了已经存在的int类型的对象2.这个很好理解,因为本身只是想给y赋一个值2,而在内存中已经存在了这样一个int类型对象2,所以就直接让y指向了已经存在的对象。这样一来不仅能达到目的,还能节约内存空间。t=s这句变量互相赋值,也相当于是让t指向了已经存在的字符串类型的对象'hello'(这个原理和C语言中指针的互相赋值有点类似)。

    看这幅图就理解了:




    链接:https://blog.csdn.net/tycoon1988/article/details/38850443

  • 相关阅读:
    Linux下redis的安装
    elasticsearch使用时问题
    Elasticsearch 2.x plugin 问题汇总
    elasticsearch-jdbc 插件说明
    ElasticSearch 2.x 问题汇总
    深入JVM《一》
    linux fastdfs 搭建配置(单机)
    mybatis自动generator
    spring-boot mybatis 配置 主从分离 事务
    Maven Nexus
  • 原文地址:https://www.cnblogs.com/emanlee/p/15253843.html
Copyright © 2011-2022 走看看