引用&传递引用
一、引用
>>> 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 ☕.
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 使用C#创建一个MCP客户端
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 按钮权限的设计及实现