zoukankan      html  css  js  c++  java
  • is和 =

    一般新建一个对象,内存地址是不相同的,下面的是例外。

    字符串有小地址池的要求:不能有空格、没有特殊字符和字符长度小于等于20.

    数字-5到256

    a is b:a和b的内存地址相等

    a == b :a和b的值相等

    a = b =1,:是1的两个标签

    a = 1和b = 1理论上说对象是不一样的。

    >>> a =1
    >>> b =1
    >>> c = 2
    >>> a == b     #值相等
    True
    >>> a == c
    False
    >>> a is b     #a和b指向的是一个值,内存地址相同
    True
    >>> a is c
    False
    >>> e = 365   #但是有例外
    >>> f = 365
    >>> e is f
    False
    >>> e == f
    True

    先要在重新声明的是:字符串、数字都是属于非容器,因此不存在拷贝一说。

    按理说,365和1都是属于类原子类型,都是不能在更改,为啥会有完全不同的结果了?

    这是因为对于数字来说,有一个小数据池,创建相同的数字对象,都会指向一个相同的数据池,范围在-5~~255之间,这样做也是为了节省内存。

    >>> e = 365
    >>> f = 365
    >>> e is f
    False
    >>> e == f  #值虽然相等
    True
    
    >>> id(e)   #内存地址并不相同
    139928493356080
    >>> id(f)
    139928493355696

    相对于数字来说,没有空格的字符串也有小数据池。

    >>> oo = 'wo shi'
    >>> op = 'wo shi'
    >>> id(oo)
    139928493584544
    >>> id(op)
    139928493584656
    
    >>> a = 'wqrqw'  #有地址池,长度在20以内都是共享内存的
    >>> b = 'wqrqw'
    >>> id(a)
    139928493545768
    >>> id(b)
    139928493545768
    >>> skt = 'k'*20      
    >>> kt = 'k'*20
    >>> id(skt)
    139717594629728   #长度20的时候内存地址是一样的
    >>> id(kt)
    139717594629728
    
    
    >>> edg = 'j'*21
    >>> ede = 'j'*21
    >>> id(edg)             #大于20的时候内存地址是不一样的
    139717594629800
    >>> id(ede)
    139717594629872
  • 相关阅读:
    ruby 校内相册爬虫
    ruby爬虫高并发方案
    图片爬虫
    eval class_eval usage in rury deep article
    ruby杂
    EventMachine Screencast — EMHTTPRequest
    Scraping with Typhoeus and Nokogiri
    编码转换
    eventmachine tutorial
    Thread: PaperClip: Attach files through script/console
  • 原文地址:https://www.cnblogs.com/yangmingxianshen/p/7738966.html
Copyright © 2011-2022 走看看