导读:本篇文章首席CTO笔记来给大家介绍有关Python深拷贝占多少内存的相关内容,希望对大家有所帮助,一起来看看吧。
本文目录一览:
1、python占内存大吗2、python的深拷贝和浅拷贝3、Python中的赋值,浅拷贝和深拷贝的区别4、python创建类占用内存5、Python3 & 浅拷贝与深拷贝6、python 最大能用多大存储空间python占内存大吗
你是问python的安装包嘛,如果是的话大概29M左右就够了,不怎么占内存。
python的深拷贝和浅拷贝
1.什么是深拷贝?什么是浅拷贝?(深拷贝与浅拷贝的区别)
简单点来说,就是假设B复制了A,当修改A时,看B是否会发生变化,如果B也跟着变了,说明这是浅拷贝,拿人手短,
如果B没变,那就是深拷贝,自食其力。
也可以这么说: 浅拷贝没有拷贝子对象,所以原始数据改变,子对象会改变;深拷贝,包含对象里面的子对象的拷贝,所以原始对象的改变不会造成深拷贝里任何子元素的改变
(1)父对象是可变对象拷贝,只拷贝父对象的的值,不会对其子对象的值进行拷贝而是拷贝的子对象的索引,然后创建一个新的对象(ID地址不一样),如果子对象是可变对象,依然是可以修改的。
(2)父对象是不可变对象的拷贝,就是对另外一个变量的内存地址的拷贝(ID地址一样)或者说对象引用。
import copy
a1=[1,2]
a2=[3,4]
a=[a1,a2]
b=copy.copy(a)#浅拷贝
c=copy.deepcopy(a)#深拷贝
print(id(a)) #140414167869960
print(id(b)) #140414167869896
print(id(c)) #140414167869832
print(id(a[0])) # 140414167868488
print(id(b[0])) #140414167868488
print(id(c[0])) #140414167869768
"""
"""
import copy
a1=(1,2)
a2=(3,4)
a=(a1,a2)
b=copy.copy(a)
c=copy.deepcopy(a)
print(id(a)) #140648248055496
print(id(b)) #140648248055496
print(id(c)) #140648248055496
print(id(a[0])) #140648248055944
print(id(b[0])) #140648248055944
print(id(c[0])) #140648248055944
"""
Python中的赋值,浅拷贝和深拷贝的区别
赋值(=),就是创建了对象的一个新的引用,修改其中任意一个变量都会影响到另一个。
浅拷贝:创建一个新的对象,但它包含的是对原始对象中包含项的引用(如果用引用的方式修改其中一个对象,另外一个也会修改改变){1,完全切片方法;2,工厂函数,如list();3,copy模块的copy()函数}
深拷贝:创建一个新的对象,并且递归的复制它所包含的对象(修改其中一个,另外一个不会改变){copy模块的deep.deepcopy()函数}
python创建类占用内存
2g。python创建类占用内存有2g。Python由荷兰数学和计算机科学研究学会的吉多范罗苏姆于1990年代初设计,作为一门叫做ABC语言的替代品。
Python3 & 浅拷贝与深拷贝
在Python中对象的赋值(=)其实就是对象的引用。即:当创建一个对象,把它赋值给另一个变量时,python并没有拷贝这个对象,只是拷贝了这个对象的引用而已。
Python中对象的拷贝分为:浅拷贝(copy)和深拷贝(deepcopy)。
浅拷贝:拷贝了最外围的对象本身,内部的元素都只是拷贝了一个引用而已。也就是,将原对象在内存中引用地址拷贝过来,然后让新的对象指向这个地址。可以使用“=”或列表自带的copy()函数(如list.copy()),或使用copy模块的copy()函数。
深拷贝:外围和内部元素都进行了拷贝对象本身,而不是引用。即把对象复制一遍,并且该对象中引用的其他对象也同时复制,完全得到一个新的一模一样的对象,对新对象里的值进行修改不会影响原有对象,新对象和原对象完全分离开。深拷贝只能使用copy模块中deepcopy()函数,使用前要导入:from copy import deepcopy。
Python中对象分为不可变对象 、可变对象。
不可变对象:一旦创建就不可修改的对象,例如:字符串、元组、数字
可变对象:可以修改的对象,例如:列表、字典。
其中Python中的切片可以应用于:列表、元组、字符串,但不能应用于字典。
而深浅拷贝,可应用于序列(列表、元组、字符串),也可应用于字典。
其中不可变对象,不管是深拷贝还是浅拷贝,地址值在拷贝后的值都是一样的。
以下以元组(不可变类型)为例
从上述示例可以看出:
不可变对象类型,没有被拷贝的说法,即便是用深拷贝,查看id的话也是一样的,如果对其重新赋值,也只是新创建一个对象,替换掉旧的而已。
所以不可变类型,不管是深拷贝还是浅拷贝,地址值和拷贝后的值都是一样的。
以下以列表(可变类型)为例
第一种方法:使用=号浅拷贝
输出结果:
第二种方法:使用copy浅拷贝
输出结果:
第三种方法:使用deepcopy深拷贝
输出结果:
从上述示例可以看出:
=浅拷贝:值相等,地址相等
copy浅拷贝:值相等,地址不相等
deepcopy深拷贝:值相等,地址不相等
总结:
1,深浅拷贝都是对源对象的复制,占用不同的内存空间。
2,不可变类型的对象,对于深浅拷贝毫无影响,最终的地址值和值都是相等的。
3,可变类型的对象,使用=浅拷贝时, 值相等,地址相等,对新对象里的值进行修改同时会影响原有对象;使用copy浅拷贝时值相等,地址不相等;使用deepcopy深拷贝时值相等,地址不相等。可以看出针对可变类型copy浅拷贝和deepcopy深拷贝,对新对象里的值进行修改不会影响原有对象。
python 最大能用多大存储空间
这个是操作系统的限制,跟python没有直接关系,因为python是没有限制的。
32位的系统:windows下单个进程可以用到2G内存;linux下单个进程可以用到4G内存。
64位的系统:
windows下单个进程Intel Itanium-based可用到7TB,Windows 8.1和Windows Server 2012
R2:可用128,其它版本TBx64: 8 TB
但是不同版本windows系统可用的最大物理内存数也有限制,比如64位win7家庭基本版只能认出8G内存,专业版以上能认出192G内存。
linux下不同的发行商,或者不同的内核编译参数也会有也不同的限制,但都是按T计的。
结语:以上就是首席CTO笔记为大家介绍的关于Python深拷贝占多少内存的全部内容了,希望对大家有所帮助,如果你还想了解更多这方面的信息,记得收藏关注本站。