3.9 内存相关

3.9.1 id,查看内存地址

>>> v1 = [11,22,33]
>>> v2 = [11,22,33]
>>> print(id(v1),id(v2)) # 比较两个变量的内存值
4472652360 4473773640
# 对于 -5 ~ 256 的整数来说会有小地址池的概念,不会创建新的内存地址
>>> v1 = "我,你,他,它,她"
>>> v2 = "我,你,他,它,她"
>>> print(id(v1),id(v2))
4473666128 4473665840
 # 赋值,就是把v2指向了v1的内存地址,所以他们的内存地址一样
>>> v1 = "我,你,他,它,她"
>>> v2 = v1
>>> print(id(v1),id(v2))
4473666128 4473666128 # 重新赋值,v1的内存地址变了,但是v2的内存地址没变
>>> v1 = "我,你,他,它,她"
>>> v2 = v1
>>> v1 = "我,你,他,它,她,天" v1现在指向"我,你,他,它,她,天"的地址,v2还是原来的
>>> print(id(v1),id(v2))
4473665840 4473666128
>>> print(v2)
我,你,他,它,她

is,比较内存地址

>>> v1 = {'k1':'v1','k2':[1,2,3]}
>>> v2 = {'k1':'v1','k2':[1,2,3]}
>>> result1 = v1 == v2
>>> result2 = v1 is v2
>>> print(result1)
True
>>> print(result2)
False

重要

is 和 == 的区别?

== 用于比较值是否相等。

is 用于比较内存地址是否相等。

PS:找到内存地址并在其中做操作和赋值 不一样

重新赋值是重新开辟一块内存空间、可变数据类型

#练习1(内部修改)
v1=[11,22,33]
v2=v1
v1.append(666)
print(v2) #含有666 #练习2(赋值)
v1=[11,22,33]
v2=v1
v1=[1,2,3,4] #此时v1重新赋值为[1,2,3,4],v1=[11,22,33] 对应的内存地址被回收,只要有指向这个内存地址的,就不会被回收
print(v2) #[11,22,33] #练习3(重新赋值)
v1='alex'
v2=v1
v1='old boy'
print(v2) #'alex' 总结:可变数据类型列表/字典/集合 有内部修改和赋值
字符串等不可变的 只有重新赋值(不可在内部修改) ps:
v=[1,2,3]
value=[11,22,v]
value[2]=666 #对value自己更改,v不会改变
print(v) #[1, 2, 3] v=[1,2,3]
value=[11,22,v]
value[2][0]=666 #对v里面修改,v会改变
print(v) #[666, 2, 3]

python中有小数据池--缓存机制,节省内存

  1. 数字 (-5-256)
  2. 简单的字符串 ‘ALEX’
a=1
b=1
print(id(a),id(b)) #496846480 496846480 #理论上赋值,是重新开辟内存地址,但python中有缓存机制

3.10 深浅拷贝

浅拷贝:只拷贝第一层。浅copy会仅复制dict的第一层数据,更深层的scores下面的值依然是共享一份

深拷贝:拷贝所有数据(只针对可变数据类型)--- 重新拷贝意味着重新在内存中开辟一块空间,都是独立的内存地址

只有一层的深拷贝意义不大,重要的是对于嵌套

1、int+str+bool/tuple 深浅拷贝是一样的(不可变数据类型,类似小数据池的概念)

v1='alex'
v2=copy.copy(v1)
v3=copy.deepcopy(v1)
print(id(v1),id(v3)) #11611168 11611168
2、list+set+dict (可变数据类型)
深浅拷贝不一样的

总结

浅拷贝:仅会拷贝a的框架的内存地址, 里面的任何子元素的内存地址都不会被拷贝.
深拷贝:不仅拷贝a的框架,而且会拷贝a里所有的可变元素的内存地址,注意不可变元素仍不可拷贝

python内存相关以及深浅拷贝讲解的更多相关文章

  1. Python内存相关

    Python内存相关 示例一: v1 = [1, 2, 3] v2 = [1, 2 ,3] v1 = 123 v2 = 123 v1 = "dogfa" v2 = "do ...

  2. python学习笔记:深浅拷贝的使用和原理

    在理解深浅拷贝之前,我们先熟悉下变量对象和数据类型 1.变量和对象 变量-引用-对象(可变对象,不可变对象) 在python中一切都是对象,比如[1,2],'hello world',123,{'k1 ...

  3. python之路(三)-深浅拷贝

    深浅拷贝用法来自copy模块. 导入模块:import copy 浅拷贝:copy.copy 深拷贝:deepcopy 字面理解:浅拷贝指仅仅拷贝数据集合的第一层数据,深拷贝指拷贝数据集合的所有层.所 ...

  4. python变量存储和深浅拷贝

    python的变量及其存储 在高级语言中,变量是对内存及其地址的抽象.对于python而言,python的一切变量都是对象,变量的存储,采用了引用语义的方式,存储的只是一个变量的值所在的内存地址,而不 ...

  5. Python collection模块与深浅拷贝

    collection模块是对Python的通用内置容器:字典.列表.元组和集合的扩展,它包含一些专业的容器数据类型: Counter(计数器):dict子类,用于计算可哈希性对象的个数. Ordere ...

  6. Python基础入门知识点——深浅拷贝

    深浅拷贝 对象引用.浅拷贝.深拷贝(拓展.难点.重点) Python中,对象的赋值,拷贝(深/浅拷贝)之间是有差异的,如果使用的时候不注意,就可能产生意外的结果 其实这个是由于共享内存导致的结果 拷贝 ...

  7. C++/C#中堆栈、对象内存模型、深浅拷贝、Array.Clone方法

    转载自:http://blog.csdn.net/jarvischu/article/details/6425534 目录 1.      C++/C#中对象内存模型................. ...

  8. 从零开始的Python学习Episode 8——深浅拷贝

    深浅拷贝 一.浅拷贝 列表中存储的是数据的内存地址,当我们要查询或修改列表中的数据时,我们是通过列表中的地址找到要访问的内存.当我们修改列表中的数据时,如果修改的是一个不可变类型(整型,长整型,浮点数 ...

  9. python神坑系列之深浅拷贝

    深浅拷贝 1.注意在拷贝中只有使用了.deepcopy方法才能进行深度拷贝!其余的一律是浅拷贝 #深拷贝import copy lst = copy.deepcopy(lst1)  浅拷贝: 拷贝的是 ...

随机推荐

  1. win10安装mysql-最简单教程

    工具下载地址 链接: https://pan.baidu.com/s/1XL2wUDrcd9NpT8NOcXoDTQ 提取码: vu34 下载好之后解压. 在目录D:\Program Files\my ...

  2. Maximum Likelihood 最大似然估计

    Maximum Likelihood 最大似然估计 这个算法解决的问题是,当我们知道一组变量的密度分布函数与从总体采样的个体的时候,需要估计函数中的某些变量. 假设概率密度函数如下: 一般来说,为了计 ...

  3. PC端网页嵌入百度地图

    1 打开百度地图生成器: http://api.map.baidu.com/lbsapi/creatmap/ 2 设置好了之后,点击获取代码,将代码粘贴到文件中保存为html文件 参考网址:https ...

  4. 网易云课堂_C++程序设计入门(下)_第10单元:月映千江未减明 – 模板_第10单元 - 单元作业:OJ编程 - 创建数组类模板

    第10单元 - 单元作业:OJ编程 - 创建数组类模板 查看帮助 返回   温馨提示: 1.本次作业属于Online Judge题目,提交后由系统即时判分. 2.学生可以在作业截止时间之前不限次数提 ...

  5. IIS部署网站 HTTP 错误 500.21 - Internal Server Error

    HTTP 错误 500.21 - Internal Server Error处理程序“PageHandlerFactory-Integrated”在其模块列表中有一个错误模块“ManagedPipel ...

  6. springboot-elasticsearch项目启动报错:'elasticsearchTemplate' that could not be found

    解决: 将elasticsearch的相关配置加入到application.yml配置文件中就可以解决

  7. mac打开已损坏或者不明来源的应用的解决方法

    如遇:「xxx.app已损坏,打不开.你应该将它移到废纸篓」,并非你安装的软件已损坏,而是Mac系统的安全设置问题,因为这些应用都是破解或者汉化的,那么解决方法就是临时改变Mac系统安全设置.出现这个 ...

  8. JSON中文处理类实例

    $array = array( 'Name'=>'络恩', 'Age'=>24); $post=my_json_encode($array); // 这个函数是判断版本,如果是搞版本的则直 ...

  9. flask response 详解

    from flask import Flask,Response,jsonify #Flask = werkzeug(处理网络的) + sqlalchemy(处理数据库的) + jinja2 (处理模 ...

  10. ajax的post请求crsftoken提交