引用&传递引用
一、引用
>>> spam = 42 >>> cheese = spam >>> spam = 108 >>> spam 108 >>> cheese 42
将42赋值给spam变量,然后拷贝spam中的值,将它赋值给变量cheese,稍后将spam值改为108时,这不会影响cheese中的值。这是因为spam和cheese是不同的变量,保存了不同的值。
列表就不是这样的,当将列表赋值给一个变量是,实际上是将列表的“引用”赋值给了该变量。引用是一个值,指向某些数据。列表引用是指向一个列表的值。
①>>> spam = [0,1,2,3,4,5] ②>>> cheese = spam ③>>> cheese[1] = "hello" >>> spam [0, 'hello', 2, 3, 4, 5] >>> cheese [0, 'hello', 2, 3, 4, 5]
此时代码只改变了cheese列表,但是cheese和spam列表同时发生了改变。
当创建列表①时,将对它的引用赋给了变量。代码②中将spam中的列表引用拷贝到cheese,而不是列表值本身。这意味着存储在spam和cheese中的值,现在指向了同一个列表。
Tips:
对于字符串和整数值,变量就包含了字符串或整数值;在变量保存可变数据类型的值,例如列表或字典,python就使用引用。对于不可变的数据类型的值,例如字符串,整型或元组,python变量就保存值本身。
二、传递引用
>>> spam = [0,1,2,3,4,5] >>> def eggs(someParameter): ... someParameter.append("hello") ... >>> eggs(spam) >>> print(spam) [0, 1, 2, 3, 4, 5, 'hello']
尽管spam和someparameter包含了不同的引用,但它们都指向相同的列表。这就是为什么函数内的append("hello")方法调用在函数函数调用返回后,依然会对该列表产生影响。
作者:solomon-zj
出处:https://www.cnblogs.com/solomon-zj/p/17322428.html
版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。
愚者不努力,懒人盼巅峰
Buy me a cup of coffee ☕.
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步