zoukankan      html  css  js  c++  java
  • 可变数据类型&不可变数据类型

    不同的变量在内存中有不同的存储空间,每个存储空间都有一个ID

    >>> a = 32
    >>> id(a)   # 查看ID
    1571185856
    >>> b = a
    >>> id(b)
    1571185856

      声明一个变量a,再把a的值赋值给b,得到a,b两个变量,但是ID相同,即指向同一个内存地址,就像以前的人起名字,名、字、号。

      那么对b重新赋值呢

    >>> b = 33
    >>> id(b)
    1571185888
    >>> id(a)
    1571185856

      a还是原来的ID,但是b变了。他把名字改了,但是另外一个人恰好又起了这个名字。这两个名字指的就是两个人了。

      下面进入正题,什么是可变数据类型呢?变量的值改变但是ID不变,反之则是不可变数据类型

      可变数据类型:列表、字典、集合

    >>> name_list = ['alex', 'mary']
    >>> id(name_list)
    2463315069192
    >>> name_list[0] = ['eric']
    >>> id(name_list)
    2463315069192
    >>> name_list.append('jake')
    >>> name_list
    [['eric'], 'mary', 'jake']
    >>> id(name_list)
    2463315069192
    列表
    >>> person = {'name': 'alex', 'age': 24}
    >>> id(person)
    2463314404192
    >>> person['gender'] = 0
    >>> person
    {'name': 'alex', 'age': 24, 'gender': 0}
    >>> id(person)
    2463314404192
    字典

      不可变数据类型是不可修改的,硬要改的话只能是重新赋值。

    >>> name = 'jake'
    >>> id(name)
    2463315000432
    >>> name.replace('e', 'ie')
    'jakie'
    >>> id(name)
    2463315000432  # id没变
    >>> name
    'jake'  
    >>> name = name.replace('e', 'ie')
    >>> id(name)
    2463314429184  #重新赋值,ID变化,name也变
    >>> name
    'jakie'  
    字符串

      元组和列表类似,有索引,如果像改列表一样尝试修改元组的话直接报错

    >>> name_tuple = ('alex', 'maria')
    >>> id(name_tuple)
    2463314574664
    >>> name_tuple[0]
    'alex'
    >>> name_tuple[0] = 'a'
    Traceback (most recent call last):
      File "<pyshell#39>", line 1, in <module>
        name_tuple[0] = 'a'
    TypeError: 'tuple' object does not support item assignment
    元组

    hash:不可变数据类型才能被hash

  • 相关阅读:
    Node.js 函数
    Node.js模块系统
    在Apache服务器上安装SSL证书
    Node.js Stream(流)--文件操作
    HTML5自带验证美化
    HTML5约束验证API
    Node.js Buffer(缓冲区)
    Python 练习:简单的购物车(二)
    Python 练习:简单的购物车
    Python 列表操作
  • 原文地址:https://www.cnblogs.com/webc/p/8911491.html
Copyright © 2011-2022 走看看