利用Python内置函数id()找出内部地址,探讨赋值与内建地址。

id()的官方解释:this is the address of the object in memory

那么 a =1 是什么意思?

>>> id(1)
1539072224
>>>
=============================== RESTART: Shell ===============================
>>> id(1)
1539072224

int 1 的id为 1539072224,restart后,不变,即为恒定。

>>> a=1
>>> b=1
>>> id(a)==id(b)
True
>>> id(a)==id(1)
True

① 对于int来说,a=1, b=1,  a与b与1 同地址。1只有一个恒定地址,重启不变。

a=[1,2] 是什么意思?

>>> id([1,2])
2652678637128
>>>
=============================== RESTART: Shell ===============================
>>> id([1,2])
2491240771400
>>> id(1)
1539072224
>>> id([1,2])
2491241012296

对于list,同值在每次赋值时不同地址。(tuple经测试也是一样)

>>> x=[1,2]
>>> y=x
>>> id(x)-id(y)
0
>>> id(x)-id([1,2])
-65344

=============================== RESTART: Shell ===============================
>>> x=[1,2]
>>> y=[1,2]
>>> id(x)-id(y)
-156672

② 对于tuple,list,x=[1,2], y=[1,2],x,y,[1,2]的地址均不同。

③对于tuple,list,x=[1,2], y=x , x,y的地址相同。

既是说:

>>> x=[1,2]
>>> y=x
>>> x.append(1)      #list可变,tuple不可变

>>> y
[1, 2, 1]

字典中的copy: 浅复制与深复制到底有什么差别

=============================== RESTART: Shell ===============================
>>> x={1:'qwe',2:['asd','zxc']}
>>> y=x
>>> id(y)-id(x)
0
>>> id(y[2])-id(x[2])
0
>>> y=x.copy()
>>> id(y)-id(x)
521056
>>> id(y[2])-id(x[2])
0
>>> from copy import deepcopy
>>> y=deepcopy(x)
>>> id(y)-id(x)
72
>>> id(y[2])-id(x[2])
192

字典不同复制方式:

>>> x={1:'qwe',2:['asd','zxc']}
>>> y=x
>>> y[3]='f'                                  # y=x,   id(y) - id(x) == 0    ,     id(y[2])-id(x[2]) == 0
>>> x
{1: 'qwe', 2: ['asd', 'zxc'], 3: 'f'}      #①:y=x,y,x同地址,y[3]=['f'] 同时会改变x

>>> y=x.copy()
>>> y[4]='f'
>>> x
{1: 'qwe', 2: ['asd', 'zxc'], 3: 'f'}
>>> y
{1: 'qwe', 2: ['asd', 'zxc'], 3: 'f', 4: 'f'}          # y=x.copy(),   id(y) - id(x) != 0    ,     id(y[2])-id(x[2]) == 0
>>> y[2].append('a')
>>> x
{1: 'qwe', 2: ['asd', 'zxc', 'a'], 3: 'f'}        #②:y=x.copy(),y,x不同地址,但y[2],x[2]同地址。y.append('f')同时会改变x

>>> from copy import deepcopy
>>> y=deepcopy(x)
>>> y[4]='f'
>>> x
{1: 'qwe', 2: ['asd', 'zxc', 'a'], 3: 'f'}
>>> y
{1: 'qwe', 2: ['asd', 'zxc', 'a'], 3: 'f', 4: 'f'}      # y=deepcopy(x),   id(y) - id(x) != 0    ,     id(y[2])-id(x[2]) != 0
>>> y[2].append('a')
>>> x
{1: 'qwe', 2: ['asd', 'zxc', 'a'], 3: 'f'}
>>> y
{1: 'qwe', 2: ['asd', 'zxc', 'a', 'a'], 3: 'f', 4: 'f'}      #③:y=deepcopy(x),y,x不同地址,y[2],x[2]不同地址。y.append('f')不会改变x

即: y=x , 赋予同一个地址,dict y的增添方法(赋值)会同样改变x。

  y=x.copy() 浅复制,y被赋予了不同地址,dict 的增添方法不会改变x,但是,dict 中所包含的tuple 是同地址,tuple的增添方法append会改变x。

  y=deepcopy(x)深复制,连同其内的tuple都被赋予不同地址,tuple的增添方法append不会改变x。

Python Memo 赋值与ID (Assignment & id())的更多相关文章

  1. 关于python中赋值、浅拷贝、深拷贝之间区别的深入分析

    当重新学习了计算机基础课程<数据结构和算法分析>后再来看这篇自己以前写的博文,发现错误百出.python内置数据类型之所以会有这些特性,归根结底是它采用的是传递内存地址的方式,而不是传递真 ...

  2. python的赋值

    python的赋值其实就是引用,我们用python的id函数看一下: 然而令人蛋疼的事情发生了, 为什么会给一个新的c赋值1,它与上面的a和b的id一样呢. 原来是python会认为一些小的整形会经常 ...

  3. 如何理解 Python 的赋值逻辑

    摘要: 如果你学过 C 语言,那么当你初见 Python 时可能会觉得 Python 的赋值方式略有诡异:好像差不多,但又好像哪里有点不太对劲. 本文比较并解释了这种赋值逻辑上的差异.回答了为什么需要 ...

  4. 图解python中赋值、浅拷贝、深拷贝的区别

    Python中,对象的赋值,拷贝(深/浅拷贝)之间是有差异的,如果使用的时候不注意,就可能产生意外的结果.下面本文就通过简单的例子介绍一下这些概念之间的差别. 对象赋值 直接看一段代码: will = ...

  5. 深入理解Python中赋值、深拷贝(deepcopy)、浅拷贝(copy)

    赋值 python跟java中的变量本质是不一样的,Python的变量实质上是一个指针(int型或str型),而java的变量是一个可操作的存储空间. a = 123b = a print(id(a) ...

  6. python中赋值、浅拷贝、深拷贝详解(转)

    一.赋值 >>> a = [1, 2, 3]>>> b = a>>> print(id(a), id(b), sep='\n')139701469 ...

  7. python 之 赋值和拷贝(你真的了解吗)

    现象:先上一段代码. >>> import copy >>> a = [1,2,3,4,['a','b']] >>> b = a >> ...

  8. python中赋值和浅拷贝与深拷贝

    初学编程的小伙伴都会对于深浅拷贝的用法有些疑问,今天我们就结合python变量存储的特性从内存的角度来谈一谈赋值和深浅拷贝~~~ 预备知识一——python的变量及其存储 在详细的了解python中赋 ...

  9. [Python] 等号赋值, copy, deepcopy的区别

    参考链接: 1. 介绍python中的可变类型与不可变类型:https://blog.csdn.net/answer3lin/article/details/86430074 (也可以参考转载博客 P ...

随机推荐

  1. 19-01【vmware machine】虚拟机无法联网访问

    问题 我本地的虚拟机上没办法访问外网,然后搞了很久很久,最终解决了. 现象 A,电脑持续运行了三天,也没有复杂的环境调整的情况下.我本地的ubuntu(使用VMWare machine创建的),突然没 ...

  2. 4-20arget 属性和hover

    1.target 属性 定义和用法 target 属性规定在何处打开 action URL. 值 描述 _blank 在新窗口中打开. _self 默认.在相同的框架中打开. _parent 在父框架 ...

  3. redis缓存雪崩,缓存穿透,缓存击穿的解决方法

    一.缓存雪崩 缓存雪崩表示在某一时间段,缓存集中失效,导致请求全部走数据库,有可能搞垮数据库,使整个服务瘫痪. 使缓存集中失效的原因: 1.redis服务器挂掉了. 2.对缓存数据设置了相同的过期时间 ...

  4. angular 键盘事件绑定与过滤

    方便的angular按钮绑定 如 <input (keyup.enter)="keyUpSearch($event)" value="按下回车键触发"&g ...

  5. 洛谷1027 Car的旅行路线

    原题链接 将每个城市拆成四个点,即四个机场来看,那么这题就是求最短路. 不过建图有些麻烦,先要找出第四个机场的坐标. 设另外三个机场的坐标为\((x_1, y_1), (x_2, y_2), (x_3 ...

  6. STS中poem.xml配置文件

    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/20 ...

  7. 新学的的matplotlib库~~~~

    import numpy as np import matplotlib.pyplot as plt x=np.linspace(0,6,100) y=np.cos(2*np.pi*x)*np.exp ...

  8. 【Mybatis】MyBatis之表的关联查询(五)

    本章介绍Mybatis之表的关联查询 一对一关联 查询员工信息以及员工的部门信息 1.准备表employee员工表,department部门表 CREATE TABLE `employee` ( `i ...

  9. py3.0第五天,常用模块

    本节大纲: 模块介绍 time &datetime模块 random os sys shutil json & picle shelve xml处理 yaml处理 configpars ...

  10. CODEFORCES ROUND #761 ANALYSES BY TEAM:RED & BLACK

    A. Dasha and Stairs Problems: 一个按照1,2,3……编号的楼梯,给定踩过的编号为奇数奇数和偶数的楼梯数量a和b,问是否可以有区间[l, r]符合奇数编号有a个,偶数编号有 ...