转:Python中的一些概念:变量、对象、赋值、引用、浅拷贝、深拷贝
Python彻底搞懂:变量、对象、赋值、引用、拷贝(知乎,推荐)
变量是一个系统表的元素,拥有指向对象的连接的空间。
对象是分配的一块内存,有足够的空间去表示它们所代表的值。
引用是自动形成的从变量到对象的指针。
赋值是指建立变量和对象之间链接(引用)。
本质上,可以说 Python 没有赋值,只有引用。
Python中,我们平时所说的变量其实只是「标签」,是引用。
浅拷贝包括切片操作,工厂函数,copy库中的copy函数等
- 对于可变对象,浅拷贝和赋值一样,拷贝的是对象的引用,所以指向的是同一个对象,即id相同。
- 对于不可变对象,浅拷贝会拷贝第一层对象,不会拷贝对象内部的子对象。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | # ========== 不可变对象的赋值和浅拷贝示例 =========== a = 'vivo' b = a # 赋值操作 c = a[:] # 切片操作,浅拷贝 print ( id (a)) # 输出:2630828485296 print ( id (b)) # 输出:2630828485296 print ( id (c)) # 输出:2630828485296 # ======== 可变对象的赋值、浅拷贝和深拷贝示例 ========= from copy import deepcopy f = [ 0 , [ 1 , 2 ], 3 ] g = f h = f[:] # 浅拷贝 w = deepcopy(f) # 深拷贝 f[ 0 ] = 8 f[ 1 ][ 1 ] = 9 print (f, id (f)) # 输出:[8, [1, 9], 3] 2038472791112 print (g, id (g)) # 输出:[8, [1, 9], 3] 2038472791112 print (h, id (h)) # 输出:[0, [1, 9], 3] 2038466133640 print (w, id (w)) # 输出:[0, [1, 2], 3] 2038471134536 |
list中的一个个元素是一个个对象,list是可变对象,意思是每个元素替换为其他对象,整个的list对象的id不变。
以一个两层列表a(如下图所示)来说明浅拷贝和深拷贝,浅拷贝的意思是,只对列表第一层的元素对象进行复制(即对第一层的每个元素对象,开辟新的内存空间,完全重新做一份id不同的元素对象),对于第二层的元素对象,不会重新做一份,而是建立引用,例如:
1 2 3 | a = [0, [1, 2], 3] b = a[:] # 这是浅拷贝操作 |
示意图如下:
深拷贝是指对列表a的所有层的所有元素对象都重新做一份(即开辟新的内存空间,建立新对象)。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· .NET10 - 预览版1新功能体验(一)
2020-02-23 转:简单例子说明梯度下降、momentum和学习率衰减