码迷,mamicode.com
首页 > 编程语言 > 详细

python机制详解

时间:2021-05-24 07:05:47      阅读:0      评论:0      收藏:0      [点我收藏+]

标签:字符   回收机制   lis   需求   不可变对象   递归   自动分配   详解   进制   

浅拷贝:藕断丝连

深拷贝:原对象和新对象没有任何关系

1.python中对象的赋值实际上是对象的引用。

不可变对象:字符串、整形、元组。当你试图更改不可变对象的时候,例如执行了a = 1 实际是创建了一个新的值为1的对象让a指向它。

可变对象:列表、字典、集合。如列表list中适用append后list指向不变只是增加了内容。但是如果执行了l2= list,list = list+[1],则创建了一个结尾加上1的新列表。l2中仍然保留了以前旧的list的值。

2.变量能够删除,但是对象无法删除。如del name,删除了name这个变量,但是name中的内容[1,2,3]没有被删除,当该内容没有被引用后python的内存回收机制会将它回收。

3.当函数中的参数传入的是可变对象的时候,在函数中修改该对象将真实的影响到该对象的值(和C++的形参不同)。

 

介绍完这几个python的特性,接下来我们来讲堆区和栈区,最后再讲深拷贝和浅拷贝。

内存空间在逻辑上分为三部分:代码区、静态数据区和动态数据区,动态数据区又分为栈区和堆区。

代码区:存储方法体的二进制代码。高级调度(作业调度)、中级调度(内存调度)、低级调度(进程调度)控制代码区执行代码的切换。

静态数据区:存储全局变量、静态变量、常量,常量包括final修饰的常量和String常量。系统自动分配和回收。

栈区:存储运行方法的形参、局部变量、返回值。对象的引用。

堆区:new对象的对象存在这。

寄存器:最快的存储区, 由编译器根据需求进行分配,我们在程序中无法控制。

 

ram 主存:与cpu直接交换数据,速度快。断电后数据丢失。RAM用来暂时存储程序、数据和中间结果。

rom只读存储器:断电了数据仍然能够保留。

 

好了,接下来讲到深拷贝和浅拷贝:

浅拷贝:是对一个对象父级的拷贝,不拷贝内部。外层数据可变,浅拷贝会开辟新的内存空间存放。外层数据不可变,浅拷贝仍然是引用。白话:拷贝你的引用,地址相同。

深拷贝:内外都拷贝。可以减少内存的使用,防止修改数据后找不到原来数据。原理是递归拷贝一个类中每个对象和它的子对象。

 

python机制详解

标签:字符   回收机制   lis   需求   不可变对象   递归   自动分配   详解   进制   

原文地址:https://www.cnblogs.com/snailbuster/p/14760203.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!