python基础小知识:引用和赋值的区别

python基础(5):深入理解 python 中的赋值引用、拷贝、作用域 本文章向大家介绍python基础(5):深入理解 python 中的赋值引用、拷贝、作用域,主要内容包括1、先来看个问题吧:、2、引用 VS 拷贝:、3、增强赋值以及共享引用:、4、python 从 2k 到 3k,语句变函数引发的变量作用域问题、5、深入理解 python 变量作用域及其陷阱、5.2 函数值传递、5.3 为什么修改全局的dict变量不用global关键字、5.4 可变对象 list 的 = append/extend 差别在哪? 阅读详情

嗨喽~大家好呀,这里是魔王呐 ❤ ~!

python更多源码/资料/解答/教程等 点击此处跳转文末名片免费获取

1.引用

python中,赋值操作会产生相同对象的多个引用,

如果在原位置修改这个可变对象时,可能会影响程序其他位置对这个对象的引用。

>>> x = [1, 2, 3]
>>> y = [x, 4, 5]
>>> z = [x, 6]

>>> y
[[1, 2, 3], 4, 5]
>>> z
[[1, 2, 3], 6]

# 改变被多次引用的变量x
>>> x[0] = 2
>>> y
[[2, 2, 3], 4, 5]
>>> z
[[2, 2, 3], 6]

引用类似于其他语言的“指针”。

通过引用,就可以在程序范围内任何地方传递大型对象而不必在途中进行开销巨大的赋值操作。

2.赋值

赋值与引用不同,复制后会产生一个新的对象,原对象修改后不会影响到新的对象。

赋值的方法:

没有起点和重点的分片法:

'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:926207505
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
>>> A = [1, 2, 3]
>>> B = A[:]  # B赋值A
>>> B
[1, 2, 3]

# 改变A的值
>>> A[0] = 2

>>> A
[2, 2, 3]
>>> B
[1, 2, 3]

字典、集合或列表的copy方法:

>>> a = [1, 2, 3]
>>> b = a.copy()  # b赋值a

# 改变a的值
>>> a[0] = 2

>>> a
[2, 2, 3]
>>> b
[1, 2, 3]

list()、dict()、set()等内置函数可以进行赋值:

'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:926207505
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
>>> x = [1, 2]
>>> y = list(x)

>>> x[1] = 3
#Python学习交流群:711312441
>>> x
[1, 3]
>>> y
[1, 2]

不过需要注意的是,这种赋值仅能做到顶层赋值,如果出现嵌套的情况下仍不能进行深层赋值。

尾语

最后感谢你观看我的文章呐~本次航班到这里就结束啦 🛬

希望本篇文章有对你带来帮助 🎉,有学习到一点知识~

躲起来的星星🍥也在努力发光,你也要努力加油(让我们一起努力叭)。

最后,宣传一下呀~👇👇👇更多源码、资料、素材、解答、交流皆点击下方名片获取呀👇👇

测试用例设计工具大盘点:总有一款适合你 本文旨在帮助测试工程师、开发人员及团队管理者快速了解主流测试用例设计工具的特点、适用场景选择逻辑。覆盖工具类型包括传统文档工具、开源管理工具、商业集成平台及新兴AI工具,范围涵盖中小团队到大型企业的不同需求。本文从“测试用例设计的痛点”切入,用生活案例解释核心概念;接着按“工具类型”分类盘点主流工具(附优缺点对比表);再通过“小团队/中大型团队/敏捷团队”等真实场景教你选工具;最后展望AI等未来趋势,帮你“一次学透,终身受用”。 阅读详情

相关推荐

实战案例—encrypt靶场(AES固定key篇)

AES是一种对称密钥加密方法,意味着加密解密时使用相同的密钥。AES加密存在三种形式:AES-128、AES-192AES-256,它们分别对应于三种不同的密钥长度——128位(即16字节)、192位(即24字节)256位(即32字节)。通常情况下,密钥的长度越长,提供的安全性就越高,但相应地,加解密过程所需的时间也会增加。默认情况下,采用的是AES-128,其提供的安全性对于大多数应用来说已经足够充分。

zhouzhou_98的博客 482

Python赋值引用、深浅拷贝的区别联系

Python中的赋值引用,进行赋值时不会开辟新的内存空间,也不会产生一个新的变量单独存在,只是在原有数据块上打上了一个新标签。当数据块的任意一个标签发生变化时,本质是这个数据块发生变化,那么指向这个数据块的任意标签都会发生变化。浅拷贝常见的形式:切片a=a[:]、工厂函数a=list(a)、copy函数a=a.copy()或a=copy.copy(a)。浅拷贝只拷贝了最外层的对象,子对象只是被拷贝了元素的引用(即对象内的元素没有被拷贝);

诗小葵的博客 1163

2023年最新整理Qt开发面试题库集锦-包含200道面试题涵盖网络编程文件系统数据库操作自定义控件开发视频讲解文档资料-旨在帮助开发者全面掌握Qt框架技术要点提升面试通过率实战.zip

2023年最新整理Qt开发面试题库集锦_包含200道面试题涵盖网络编程文件系统数据库操作自定义控件开发视频讲解文档资料_旨在帮助开发者全面掌握Qt框架技术要点提升面试通过率实战.zipRust系统编程实战

php:引用 赋值区别

PHP 的引用允许用两个变量来指向同一个内容。 相当于他们可以是 不同的名字,却可以指向 同一个 物理空间。 赋值,它实际上意味着把右边表达式的值赋给左边的运算数。 相当于,他们是 不同的名字,不同的物理空间 示例: 引用 $b = '3';echo $b; //3$a = &$b;echo $a;  //3$b = 4;echo

海生的博客 562

python引用赋值区别

python中,赋值操作会产生相同对象的多个引用,如果在原位置修改这个可变对象时,可能会影响程序其他位置对这个对象的引用引用类似于其他语言的“指针”。通过引用,就可以在程序范围内任何地方传递大型对象而不必在途中进行开销巨大的赋值操作。不过需要注意的是,这种赋值仅能做到顶层赋值,如果出现嵌套的情况下仍不能进行深层赋值赋值引用不同,复制后会产生一个新的对象,原对象修改后不会影响到新的对象。

python学习者的博客 1215

值类型引用类型的区别

要弄清这个问题需要先了解值类型引用类型的基本概览。 值类型实例通常分配在线程的堆栈上 引用类型实例分配在托管堆上,变量保存了实例数据的内存引用。 例如 object test = new object() ,那么new object() 则在托管堆上开辟的一块内存用于储存实例地址以及实例数据,而test则保存了new object() 的引用的指针,并且是保存在堆栈上的。 引用类型讲解详见: 引用类型. 弄清基本概念后我们从三个方面来分析其区别。 1,赋值区别 值类型的赋值只是进行数据赋值引用类型的

weixin_44427732的博客 562

Python 赋值引用

赋值操作 赋值语句创建对象引用python赋值语句会把对象引用存储在变量或数据结构组件中,赋值语句总是创建对象的引用,而不是复制对象,因此变量更像是指针,而不是数据存储区域。 变量在首次赋值时会被创建。python会在首次将值赋给变量时创建其变量名,有些数据结构组件也会在赋值时被创建,一旦赋值后,每当这个变量出现在表达式中,就会替换成其引用的值。 变量在引用前必须先赋值。使用尚未赋值的变量是一种错误,变量不是预声明的。 某些操作会隐式的进行赋值赋值出现在python中很多上下文中,模块导入、函数

啥也不是的博客 1364

python:深拷贝,浅拷贝,赋值引用

第一部分转载自:https://www.cnblogs.com/xueli/p/4952063.html 1. python的复制,深拷贝浅拷贝的区别python中,对象赋值实际上是对象的引用。当创建一个对象,然后把它赋给另一个变量的时候,python并没有拷贝这个对象,而只是拷贝了这个对象的引用 一般有三种方法, alist=[1,2,3,["a","b"]] (1)直接赋...

bufengzj的博客 6万+

Python赋值,copydeepcopy区别

python中的赋值,深复制,浅复制

z3w97的博客 4444

Python赋值引用

1、Python 数组的赋值引用 问题:数组传参,函数内数组修改,主函数数组也发生修改(引用导致) def Change(a): a[0]=10 if __name__=="__main__": a=[1,2,3,4] Change(a) print(a) #[10, 2, 3, 4] list,numpy总结(引用赋值) import num...

风轻云淡 1466

python基础-引用赋值按值赋值

python基础-引用赋值按值赋值 一、引用赋值 什么是引用赋值? 定义了变量a,并且指向了内存中的一个地址,定义变量b时,将a变量的引用赋给b,两个变量指向了同一个内存地址。 >>> a = [1,2,3] >>> b = a >>> id(a) 2446644301960 >>> id(b) 2446644301960 >>> id(a) == id(b) True >>> b.append

panshao521_的博客 620

Python中变量赋值传递时的引用拷贝

iamlaosong文 曾经看到这样一个问题,一个字典中的元素是列表,将这个列表元素赋值给一个变量,然后修改这个列表中元素的值,结果发现,字典中那个列表也同样修改了。那个问题如下: dict = {'a':[1,2,3,4,5],'b':2} x = dict['a'] for i in range(5): x[i] = 0 print(dict['a']) 程序运行结果如下:

驽马十驾 才定不舍 1万+

python实操】python小程序之函数的方法赋值区别

append()方法修改了原始对象(在这种情况下是列表),所以所有引用该对象的变量都会看到变化赋值操作会改变变量所引用的对象,但它不会修改原始对象。如果赋值的是不可变对象,那么原始对象保持不变;如果赋值的是可变对象,那么原始对象不会被修改,而是变量引用了新的对象这就是为什么.append()可以改变外部变量所引用的列表,而赋值操作通常不会改变外部变量所引用的对象的原因。

ya的博客 1152

python-引用赋值按值赋值

一、引用赋值 1、什么是引用赋值? 定义了变量a,并且指向了内存中的一个地址,定义变量b时,将a变量的引用赋给b,两个变量指向了同一个内存地址。 2、引用赋值,如果使用的是可变类型:会被关联修改。 a=[10,20,30] b=a print(id(a),id(b)) :2282000256896 ,2282000256896 b.append(40) print(a) : [10, 20, 30, 40] 二、按值赋值 先要明白一个道理,字符串的驻留机制:仅保存一份相同且不可变字符

python全栈 1969

赋值引用

此内容摘自《Thinking in java》Page39.  赋值使用操作符“=”。它的意思是“取右边的值(即右值),把它复制给左边(即左值)”。右值可以是任何常数、变量或者表达式(只要它能生成一个值就行)。但是左值必须是一个明确的、已命名的变量。也就是说,必须有一个物理空间可以存储等号右边的值。举例来说,可将一个常数赋给一个变量:  a = 4;  但是不能把任何东西赋给一个常数,常

likaiwalkman@csdn - Code Study Area 837

Python中的赋值引用深浅拷贝

全局变量 在函数之外创建的变量属于__main__,又被称为全局变量。它们可以在__main__中的任意函数中访问,局部变量在函数结束时消失不同,全局变量可以在不同函数的调用之间持久存在。 全局变量常常用作标志(Flags)。标志是一种布尔型变量,可以标志一个条件是否为真。 verbose = True def example(): if verbose: ...

python学习者的博客 1027

java中引用的原理

在Java中的引用类型,是指除了基本的变量类型之外的所有类型,所有的类型在内存中都会分配一定的存储空间(形参在使用的时候也会分配存储空间,方法调用完成之后,这块存储空间自动消失), 基本的变量类型只有一块存储空间(分配在stack中), 而引用类型有两块存储空间(一块在stack中,一块在heap中), 方法形参的值传递(引用)是指形参传进来的参数指向同一个值的内存(heap)中; jav

murongjianke001的专栏 412

赋值看基本类型引用类型的区别

赋值就是把某一个值赋给变量。 我凭什么要把值赋给变量? 变量相当于名字。 拿我举例,如果我没有名字,当别人叫我帮忙的时候,就只能说: “那个个头不高、颜值爆表、头发很硬、坐在角落的小哥哥,过来帮我一下呗!” 而有名字的情况是: “小强快来!” 可见变量赋值的意义在于便于使唤。 基本类型的赋值 基本类型的赋值,好比在每个盒子里放东西。 直接赋值 例如, var a = '手机' console....

weixin_33728268的博客 245

赋值引用

       对于基本类型,Java是传值的副本;对于一切对象型变量,Java都是传引用的副本。       “=”不是赋值语句,右边对象地址传给了左边的引用,使得左边的引用指向了右边的对象。对象存储于堆中,引用存储于速度更快的堆栈上。       “=”语句左边是引用(存在栈中),右边new出来的是对象(存在堆中)。“=”左右都是引用的语句,左右引用同时指向了右边引用所指向的对象。       ...

jinknow的博客 965

PHP中传值赋值引用赋值

PHP变量间的赋值方式 将a变量的值赋值给b变量有两种赋值方式: 1.传值赋值 2.引用赋值 1、传值赋值 传值赋值是将变量的值复制出一份新的值(值是一样的),只是在内存中出现两份不同的内存空间。将新值内存空间地址赋值给新的变量名字。修改两个变量的值时还不影响。 例如:将$a变量的值复制出一份存放到$b变量中.   因为他们各自指向自

ITsource 7138

对象复制对象赋值引用区别

最近看到一个很有意思的对象处理相关问题。 在php中使用clone可以克隆复制一个对象,克隆的对象是被克隆的对象相等的,但不是全等的。clone对象的定义是在对对象的属性进行一个浅复制,所有的引用属性仍然是指向原来变量的引用。 <?php class myTestClass{ public $name = "name"; public function __construct(){ $this->name = $name; } public function getNmae(

weixin_43257005的博客 403
上一篇: python爬虫知识点:5种线程锁
下一篇: Python批量采集亚马逊商品数据
魔王不会哭
博客等级 码龄5年 6002粉丝 394原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值