美文网首页
python 内存机制

python 内存机制

作者: 天若_04f0 | 来源:发表于2019-02-15 10:44 被阅读0次

list的复制

当我们想要根据已有的一个列表创建一个新的列表的时候,会涉及到列表的拷贝问题

  1. 直接使用“=”复制
a = [1,2,3]
b = a
print a, id(a) #[1, 2, 3] 54073032
print b, id(b) #[1, 2, 3] 54073032

创建了一个新的变量b,可见a和b都指向一个内存地址,b可以理解为a的一个别名,对a的修改会影响到b
内建函数id()返回对象的内存地址

  1. 浅拷贝
  • 切片
c = a[:]
print c, id(c) #[1, 2, 3] 59576584

切片运算符返回一个序列的切片,切片过程中是切下列表的一部分,创建新的表,将切下的部分复制到新的表,因此c与a的id不一样

  • copy()
d=copy.copy(a)
print d, id(d) #[1, 2, 3] 49157128
  • list()
    通过列表构造函数
e = list(a)
print e, id(e)  #[1, 2, 3] 60562760

可通过以上三种方法实现列表的浅拷贝,浅拷贝只能copy一层

a = [1,[0,1],3]
d=copy.copy(a)
a.append(4)
a[1].append(2)
print a, id(a) # [1, [0, 1, 2], 3, 4] 48239112
print d, id(d) # [1, [0, 1, 2], 3] 48301064

如果列表中包含列表,浅拷贝生产的新列表的子列表都是指向同一个对象上,对这个对象的修改会互相影响。

  1. 深拷贝
a = [1,[0,1],3]
c=copy.deepcopy(a)
a.append(4)
a[1].append(2)
print a, id(a) #[1, [0, 1, 2], 3, 4] 52708040
print c, id(c) #[1, [0, 1], 3] 51004104

只有深拷贝得到的新列表才是包括子列表在内的完全复制

字典的复制

浅复制只是把当前字典内的子对象的引用复制给新字典,当被复制字典的子对象内容改变时,新字典的子对象内容也会改变;深复制把当前字典的全部内容,也包括子对象的内容都完全复制给新字典,被复制字典和新字典是两个独立的数据对象,被复制字典内容的改变不会影响新字典的内容。浅复制用copy方法,深复制用deepcopy方法

  • 浅拷贝,复制时只会复制父对象,而不会复制对象的内部的子对象
  • 深拷贝,复制对象及其子对象

内存

关系图如下:


image.png

变量:通过变量指针引用对象,变量指针指向具体对象的内存空间,取对象的值
对象:类型已知,每个对象都包含一个头部信息(类型标识符和引用计数器)

相关文章

  • python内存管理机制

    Python内存管理机制 Python内存管理机制主要包括以下三个方面: 引用计数机制 垃圾回收机制 内存池机制 ...

  • python学习一

    1 python 如何管理内存 对象引用计数机制,垃圾回收机制,内存池机制 一。对象引用机制 python内部引用...

  • Python内存管理机制

    Python内存管理机制主要包括以下三个方面:引用计数机制 垃圾回收机制 内存池机制

  • python必知必会12

    Python 的内存机制 内存机制主要包括垃圾收集和内存管理两部分。Python 主要使用基于引用计数的垃圾回收机...

  • Python Memory Management

    Python的内存管理机制可以从三个方面来讲: 引用计数 垃圾回收 内存池机制 引用计数 Python采用了类似W...

  • 新手上路?八大秘术助你offer无数(Python初学者/码农必

    话不多说,干货: 1、Python是如何进行内存管理的? Python的内存管理主要有三种机制:引用计数机制、垃圾...

  • 面试日记--python的内存管理

    面试中被问到python的内存管理,只是说是python有自己的内存管理机制,有自己的垃圾回收机制,却不能详细作答...

  • python内存管理机制

    Python内存管理机制主要包括以下三个方面: 引用计数机制 垃圾回收机制 内存池机制 引用计数 举个例子说明引用...

  • 2018-11-19 python学习第三天

    1、内存回收机制: 在其他语言中需要考虑内存回收机制,垃圾数据太多会导致内存溢出。但是python语言无需考虑这点...

  • Python内存管理机制

    转载: Python内存管理机制 c/c++中:通过malloc和free进行内存的申请和释放 python/ja...

网友评论

      本文标题:python 内存机制

      本文链接:https://www.haomeiwen.com/subject/jrkpeqtx.html