标签:字符 回收机制 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只读存储器:断电了数据仍然能够保留。
好了,接下来讲到深拷贝和浅拷贝:
浅拷贝:是对一个对象父级的拷贝,不拷贝内部。外层数据可变,浅拷贝会开辟新的内存空间存放。外层数据不可变,浅拷贝仍然是引用。白话:拷贝你的引用,地址相同。
深拷贝:内外都拷贝。可以减少内存的使用,防止修改数据后找不到原来数据。原理是递归拷贝一个类中每个对象和它的子对象。
标签:字符 回收机制 lis 需求 不可变对象 递归 自动分配 详解 进制
原文地址:https://www.cnblogs.com/snailbuster/p/14760203.html