一、深浅拷贝的区别

深浅拷贝一般是在列表嵌套列表的情况下去讨论

浅拷贝:只拷贝列表中对象的引用,嵌套列表中的数据是不会进行全部拷贝的

深拷贝:会把对象里面所有的数据都拷贝一份,不再只拷贝对象的引用,会另开内存存储

# 浅拷贝: 只拷贝列表中对象的引用,a的值发生变化后会影响到f
a = [11,22,33]
b = [1,2,3,a] # b里面调用a
f = b.copy() # copy方法是浅拷贝
a.append("新值a")
print("f的值", f) # 结果: [1, 2, 3, [11, 22, 33, '新值a']]
# 从结果可以看到,修改了a的之后,d的值也会发生变化 # 深拷贝会把对象里面所有的数据都拷贝一份,另开一个内存存储,所以修改原来的对象拷贝出来的不受影响
import copy
a = [11,22,33]
b = [1,2,3,a]
# 需要调用copy中的deepcopy函数
f = copy.deepcopy(b)
a.append("新值a")
print("f的值", f) # 结果:[1, 2, 3, [11, 22, 33]]
# 从结果可以看到,修改了a的值并没有影响到f的值

二、小整数池

python中的整数池也是为了节约内存而设计的, 避免为整数频繁申请和销毁内存空间

小整数池范围:-5到256

>>> a = -5
>>> b = -5
>>> id(a)
140732735804256
>>> id(b)
140732735804256
>>> a = -6
>>> b = -6
>>> id(a)
3147946898928
>>> id(b)
3147918100496
>>> a = 256
>>> b = 256
>>> id(a)
140732735812608
>>> id(b)
140732735812608
>>> a = 257
>>> b = 257
>>> id(a)
3147918100496
>>> id(b)
3147918100368

上述代码可以看到,-5到256之间的数字,打印的内存地址都是一样的,注意不要直接在pycharm运行,因为pycharm会做优化,导致打印的内存地址是一样的,需要在python命令行中运行

三、大整数池

开始是空的,如果第一次定义一个字符串只有数字,字母,下划线三个元素组成,python会把这个值存储到大整数池,下次调用就会去这个大整数池调用

a = 'a_bc11'
c = 'a_bc11'
d = 'a_ !bc11'
print(id(a)) # 结果:2156715830048
print(id(c)) # 结果:2156715830048
print(id(d)) # 结果:2156713793048

从结果可以看到a,c两个内存地址是一样的,因为都是调用大整数池,d里面因为存在其他特殊字符,导致a,c内存地址不一样

python-----内存管理机制的更多相关文章

  1. Python内存管理机制及优化简析(转载)

    from:http://kkpattern.github.io/2015/06/20/python-memory-optimization-zh.html 准备工作 为了方便解释Python的内存管理 ...

  2. 【python测试开发栈】—python内存管理机制(二)—垃圾回收

    在上一篇文章中(python 内存管理机制-引用计数)中,我们介绍了python内存管理机制中的引用计数,python正是通过它来有效的管理内存.今天来介绍python的垃圾回收,其主要策略是引用计数 ...

  3. Python内存管理机制-《源码解析》

    Python内存管理机制 Python 内存管理分层架构 /* An object allocator for Python. Here is an introduction to the layer ...

  4. 解读Python内存管理机制

    转自:http://developer.51cto.com/art/201007/213585.htm 内存管理,对于Python这样的动态语言,是至关重要的一部分,它在很大程度上甚至决定了Pytho ...

  5. 了解Python内存管理机制,让你的程序飞起来

    引用: 语言的内存管理是语言设计的一个重要方面.它是决定语言性能的重要因素.无论是C语言的手工管理,还是Java的垃圾回收,都成为语言最重要的特征.这里以Python语言为例子,说明一门动态类型的.面 ...

  6. 【python测试开发栈】python内存管理机制(一)—引用计数

    什么是内存 在开始进入正题之前,我们先来回忆下,计算机基础原理的知识,为什么需要内存.我们都知道计算机的CPU相当于人类的大脑,其运算速度非常的快,而我们平时写的数据,比如:文档.代码等都是存储在磁盘 ...

  7. Python深入之python内存管理机制(重点)

    前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 作者:醍醐三叶   关于python的存储问题, (1)由于python中 ...

  8. (重点)Python深入之Python内存管理机制你会吗?

    前言本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理.作者:醍醐三叶 请注意:如果你平时学Python遇到问题找不到人解答?或者没有 ...

  9. python内存管理机制

    主要分为三部分: (1)内存池机制(2)引用计数(3)垃圾回收 (1)内存池机制对于python来说,对象的类型和内存都是在运行时确定的,所以python对象都是动态类型简单来说,python内存分为 ...

  10. Python 源码剖析(六)【内存管理机制】

    六.内存管理机制 1.内存管理架构 2.小块空间的内存池 3.循环引用的垃圾收集 4.python中的垃圾收集 1.内存管理架构 Python内存管理机制有两套实现,由编译符号PYMALLOC_DEB ...

随机推荐

  1. Mini Linux的制作过程

  2. 视频的清晰度 1080p 720p 2k 4k是什么意思?

    在bilibili上看了一些个视频,发现它视频的清晰度有很多种选法.诸如720p,1080p,2k,4k,以及我看直播时经常遇见的蓝光,超清.它们的含义分别是什么呢?为了搞清楚这个问题,也为了以后的观 ...

  3. 13.实战交付一套dubbo微服务到k8s集群(6)之交付dubbo服务的消费者集群到K8S

    构建dubbo-demo-consumer,可以使用和dubbo-demo-service的流水线来构建 1.登录jenkins构建dubbo-demo-consumer  2.填写构建dubbo-d ...

  4. user is not in the sudoers file

    使用用户账户使用sudo来运行一些特权命令时出现了如下错误(sudo是一个允许特定的用户组用另一个用户(典型的是root)的特权来运行一个命令): user is not in the sudoers ...

  5. Quartz.Net系列(七):Trigger之SimpleScheduleBuilder详解

    所有方法图 1.SimpleScheduleBuilder RepeatForever:指定触发器将无限期重复. WithRepeatCount:指定重复次数 var trigger = Trigge ...

  6. SSH免密登录详解

    SSH免密登录详解 SSH(Security Shell)安全外壳协议,是较为可靠的,专为远程登录会话和其他网络服务提供安全保证的协议. ​ 对于传统的网络服务程序(例如,FTP,Telnet等)来说 ...

  7. 基于领域驱动设计(DDD)超轻量级快速开发架构

    smartadmin.core.urf 这个项目是基于asp.net core 3.1(最新)基础上参照领域驱动设计(DDD)的理念,并参考目前最为了流行的abp架构开发的一套轻量级的快速开发web ...

  8. DataFrame索引和切片

    import numpy as np import pandas as pd from pandas import DataFrame, Seriesdf = DataFrame(data=np.ra ...

  9. Spring IoC 默认标签解析

    前言 本系列全部基于 Spring 5.2.2.BUILD-SNAPSHOT 版本.因为 Spring 整个体系太过于庞大,所以只会进行关键部分的源码解析. 本篇文章主要介绍 Spring IoC 容 ...

  10. Jmeter系列(34)- 详解 Counter 计数器

    如果你想从头学习Jmeter,可以看看这个系列的文章哦 https://www.cnblogs.com/poloyy/category/1746599.html 简单介绍 计数器的作用:循环递增生成数 ...