首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Python列表赋值不起任何作用

是指在Python中,当将一个列表赋值给另一个变量时,实际上是将原列表的引用传递给了新变量,而不是创建一个新的独立的列表。这意味着对新变量的修改会影响原列表,反之亦然。

这种行为是因为Python中的列表是可变对象,而变量只是对象的引用。当将一个列表赋值给另一个变量时,两个变量实际上指向了同一个列表对象。因此,对其中一个变量进行修改,另一个变量也会受到影响。

这种特性在某些情况下可能会导致意外的结果。为了避免这种情况,可以使用列表的拷贝方法来创建一个新的独立的列表,而不是仅仅赋值引用。可以使用切片操作或者使用copy模块中的copy()函数来实现列表的拷贝。

以下是一个示例:

代码语言:txt
复制
# 列表赋值示例
list1 = [1, 2, 3]
list2 = list1

list2.append(4)

print(list1)  # 输出 [1, 2, 3, 4]
print(list2)  # 输出 [1, 2, 3, 4]

# 列表拷贝示例
list1 = [1, 2, 3]
list2 = list1.copy()

list2.append(4)

print(list1)  # 输出 [1, 2, 3]
print(list2)  # 输出 [1, 2, 3, 4]

在上述示例中,通过赋值操作将list1赋值给list2,然后对list2进行修改,发现list1也发生了变化。而在拷贝操作中,使用了列表的copy()方法创建了一个新的独立的列表,对新列表的修改不会影响原列表。

总结起来,Python列表赋值不起任何作用是因为赋值操作实际上是将原列表的引用传递给了新变量,而不是创建一个新的独立的列表。为了避免这种情况,可以使用列表的拷贝方法来创建一个新的独立的列表。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

序列赋值引发的Python列表陷进

序列赋值Python默认操作,如果使用不当,有可能会掉入语法陷阱。 + +是指把两个序列的元素拼接在一。...给my_list的最后一个元素的列表赋值,结果所有三个元素的列表都被赋值了!这反映出my_list这三个元素不是3个列表,而是3个列表引用,指向了同一个相同的列表。...追加还是新对象,在作用到可变序列和不可变序列时效果明显,示例: # 可变序列,追加 >>> l = [1, 2, 3] >>> id(l) 2135319475136 >>> l *= 2 >>> l...一、赋值成功,因为t[2]指向的是一个可变对象(列表[30, 40]),可变对象是能赋值的。二、报错,因为可变对象赋值给了不可变对象(元组t),不可变对象不能赋值。...这位巴西作者说到,在他15年的Python生涯中,他还没见过谁在这个地方吃过亏。 小结 本文分别介绍了+、*和列表列表的陷阱,+=、*=和元组套列表的陷阱,并分别得出了教训。

48510

python列表中的赋值与深浅拷贝

首先创建一个列表 a=[[1,2,3],4,5,6] 一、赋值 a=[[1,2,3],4,5,6] b=a a[0][1]='tom' print(a) print(b) 结果: [[1, 'tom',...4,5,6] b=a b[0][1]='tom' print(a) print(b) 结果: [[1, 'tom', 3], 4, 5, 6] [[1, 'tom', 3], 4, 5, 6] 总结:赋值不管是对...a列表改变还是对b列表改变, 只要改变其中一个,另一个也会跟着变,这是因为a 和b共用一块内存,没有创建新的内存, 他们是相同的,他们指向同一个内存区域。...a) print(b) 结果: [[1, 2, 3], 'tom', 5, 6]    [[1, 2, 3], 4, 5, 6] 总结:从上面代码可以看出来浅拷贝是重新开辟一块内存,拷贝第一层数据,拷贝内部子元素...在本代码中,b列表重新开辟了一块内存放元素【b【0】,4,5,6】,也就是第一层内容, 然后b【0】的位置指向了a【0】指向的内存位置 三、深拷贝   使用copy函数 重新开辟一块内存,存放拷贝列表的所有内容

90340

python 变量作用域和列表

变量作用域 变量由作用范围限制 分类:按照作用域分类 全局(global):在函数外部定义 局部(local):在函数内部定义 变量的作用范围 全局变量:在整个全局范围都有效 全局变量在局部可以使用(即函数内部可以访问函数外部定义的变量...) 局部变量在局部范围可以使用 局部变量在全局范围无法使用 LEGB原则 L(Local)局部作用域 E(Enclosing function local)外部嵌套函数作用域 G(Global module...)函数定义所在模块作用域 B(Buildin):python内置模块的作用域 # 认为a1是全局的 a1 = 100 def fun(): print(a1) print("I am...) 一组有顺序的数据的组合 创建列表列表 # 1....) 3 # 分片操作 # 注意截取的范围,包含左边的下标值,包含右边的下标值 print(l[1:4]) # 下标值可以为空,如果写,左边下标值默认为0,右边下标值为最大数加一,即表示截取到最后一个数据

1.1K107

python基础(5):深入理解 python 中的赋值、引用、拷贝、作用

python赋值语句总是建立对象的引用值,而不是复制对象。...至始至终,并没有一个叫做 values 的列表对象容器存在,Python 也没有把任何对象的值复制进 values 去。...: x = x + y,x 出现两次,必须执行两次,性能不好,合并必须新建对象 x,然后复制两个列表合并 属于复制/拷贝 x += y,x 只出现一次,也只会计算一次,性能好,生成新对象,只在内存块末尾增加元素...://woodpecker.org.cn/diveintopython3/porting-code-to-python-3-with-2to3.html 5、深入理解 python 变量作用域及其陷阱...python参数默认值 http://segmentfault.com/a/1190000000743526 [6] Python中的变量、引用、拷贝和作用域 http://xianglong.me/article

1.5K70

Python列表赋值,复制,深拷贝以及5种浅拷贝详解

Python列表赋值,复制,深拷贝以及5种浅拷贝详解 概述 在列表复制这个问题,看似简单的复制却有着许多的学问,尤其是对新手来说,理所当然的事情却并不如意,比如列表赋值、复制、浅拷贝、深拷贝等绕口的名词到底有什么区别和作用呢...列表赋值 # 定义一个新列表 l1 = [1, 2, 3, 4, 5] # 对l2赋值 l2 = l1 print(l1) l2[0] = 100 print(l1) 示例结果: [1, 2, 3, 4..., 5] [100, 2, 3, 4, 5] 可以看到,更改赋值后的L2后L1同样也会被更改,看似简单的“复制”,在Python中,列表属于可变对象,而对可变对象的复制其实就是将列表的内存空间类似C中的指针再次指向新的变量名...,而不是诸如字符串这种不可变对象在复制时会创建新的内存空间进行赋值。...浅拷贝 当列表中的元素为不可变对象时,我们可以用以下方法对列表进行赋值: import copy # 定义一个新列表 L0 = [1, 2, 3, 4, 5] print(L0) print('-'*40

4.8K30

Python3--中括号[]与冒号:在列表中的作用

先来定义两个列表:liststr = ["helloworld","hahahh","123456"]listnum = [1,2,3,4,5,6]这两个列表都可以看懂吧,一个字符串组成的列表,一个数字组成的列表中括号..."[]"的作用 : 用于定义列表或引用列表、数组、字符串及元组中元素位置比如:liststr = ["helloworld","hahahh","123456"]listnum = [1,2,3,4,5,6...]print(liststr[0])#结果: helloworldprint(listnum[0:3])#结果:[1, 2, 3]冒号":"的作用 : 用于定义分片、步长如 : list[ : n]表示从第...0个元素到第n个元素(不包括n),list[1: ] 表示该列表中的第1个元素到最后一个元素listnum = [1,2,3,4,5,6]print(listnum[:4])#结果: [1, 2, 3,...而若直接对 a 进行操作,那么 a 的值会受到操作的影响,如 append() 等range() 函数可创建一个整数列表,一般用在 for 循环中:range(start, stop[, step])

4.8K11

python把局部变量赋值给全局变量_局部变量赋初值

讲了这么多其实我是想引出,python虽然是动态语句,但它还是会对代码做扫描工作的,会有收集有用的静态信息。...把变量环境理解成一个字典 name_env = dict() 其实就很好理解了(事实上python底层也确实是这样处理的)。...这个过程也就是赋值语句形如 a = value 时会调用赋值的指令 STORE_NAME 。我们看一下这个赋值过程你就理解了。...= 0) goto error; DISPATCH(); } 代码不多,可以逐个分析下,第一行获得的 name 就是赋值语句 a = value 的 a,a以python类型 str 形式存在。...本站仅提供信息存储空间服务,拥有所有权,承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

2.3K10

记录一个python里面很神奇的操作,对一个包含列表的元组进行增量赋值

# 记录一个python里面很神奇的操作 # 今天记录一个很神奇的操作。关于序列的增量赋值。如果你很熟悉增量赋值,你也不妨看下去,我想说的是有关于增量赋值和元组之间一种神奇的操作。...** 用列表举例 **a+=b**,使用 **\_\_add\_\_** 的话就像是使用了`a.extend(b)`,如果使用 **\_\_add\_\_** 的话,则是 `a = a+b`,前者是直接在原列表上进行扩展...,而后者是先从原列表中取出值,在一个新的列表中进行扩展,然后再将新的列表对象返回给变量,显然后者的消耗要大些。...这一步可以完成,是因为TOS指向的是一个列表(可变对象)。 3. t[2] = TOS 赋值。...Python雁横)

1.4K20

这样的奇技淫巧,劝你不用也罢

在定义变量、函数接收参数的时候,我们可以指定它们的类型,如果赋值或者传递参数的时候类型匹配,IDE会给你加上深色背景,提醒你这里有问题,如下图所示: ?...但类型标注这个功能是给IDE或者静态检查工具使用的,Python解释器在解释代码的时候,会自动忽略它。所以即使你强行遵守也没有关系,如下图所示: ? ....同时,类型标注也可以赋值,所以这样写也是可以的: a: int 这样一来,显然下面这种写法也是可以的: kingname_god: [1, 2, 3] 现在,我们把列表改成元组,于是就变成了: kingname_god...由于Python 解释器会自动忽略类型标注,所以对于这种没有赋值的类型,Python 会自动忽略整行,所以看起来就像是被注释了一样。...除了print外,任何我们自定义的函数甚至是字典、列表都可以这样写,例如: ? 但我真切希望,任何一个脑袋正常的同学都不要这样写。这种写法除了炫技以外没有任何作用

32710

这样的奇技淫巧,劝你不用也罢

在定义变量、函数接收参数的时候,我们可以指定它们的类型,如果赋值或者传递参数的时候类型匹配,IDE会给你加上深色背景,提醒你这里有问题,如下图所示: 但类型标注这个功能是给IDE或者静态检查工具使用的...所以即使你强行遵守也没有关系,如下图所示: . 有些人正是看中了Python解释器自动忽略类型标注这个特点,动起了歪脑筋,干起了奇技淫巧的勾当。...同时,类型标注也可以赋值,所以这样写也是可以的: a: int 这样一来,显然下面这种写法也是可以的: kingname_god: [1, 2, 3] 现在,我们把列表改成元组,于是就变成了: kingname_god...由于Python 解释器会自动忽略类型标注,所以对于这种没有赋值的类型,Python 会自动忽略整行,所以看起来就像是被注释了一样。...除了print外,任何我们自定义的函数甚至是字典、列表都可以这样写,例如: 但我真切希望,任何一个脑袋正常的同学都不要这样写。这种写法除了炫技以外没有任何作用

35920

python数据分析学习笔记—python基础知识

python中,变量不需要提前申明,只需要在用的时候直接给这个变量进行赋值就行。在赋值的时候支持多元赋值,比如:X,Y=3,4表示将3,4同时赋值给X,Y。 3、标识符 变量是标识符的例子。...6、对象 广义上 上讲在Python程序中用到的任何东西都称为对象 。...如果指定第一个数,Python就从序列首开始。如果没有指定第二个数,则Python会停止在序列尾。返回的序列从开始位置开始,刚好在结束位置之前结束。...如果你从for或while循环中终止,任何对应的循环else块将不执行。 5、continue语句 continue语句被用来告诉Python跳过当前循环块中的剩余语句,然后继续进行下一轮循环。...3、变量的作用区域: 根据变量的作用范围分为局部变量和全局变量两种。变量的作用域是他们被定义的块,从他们的名称被定义的那点开始起作用

1.7K51

Python程序员经常犯的10个错误,这些坑你踩过吗?

在上面的代码中,例如,人们可能会希望反复(即不明确指定bar参数)地调用foo()时总返回'baz',由于每次foo()调用时都假定(设定bar参数)bar被设置为[](即一个空列表)。...因此,bar参数在初始化时为其默认值(即一个空列表),即foo()首次定义的时候,但当调用foo()时(即,指定bar参数时)将继续使用bar原本已经初始化的参数。...上面的问题之所以会发生是因为当你给作用域中的一个变量赋值时,Python 会自动的把它当做是当前作用域的局部变量**,从而会隐藏外部作用域中的同名变量**。...此外,我们对 lst 进行的赋值操作是基于 lst 自身(这再一次被Python当成了局部变量),但此时还未定义。因此出错!...有任何问题可以后台私信我,我都很乐意解答。

51000

30条非常实用的Python代码,建议收藏!

目录: 笔记部分内容展示 1.python对象类型 Python内置对象类型:数字、字符串、列表、元组、字典、集合、文件、其他类型(类型、None、布尔型)、编程单元类型(函数、模块、类)、与实现相关的类型...分片s[i:j],包含下边界i,包含上边界j,i指定时默认为0,j指定时默认为字符串的长度。...列表与字典 6....迭代器和解析 For循环可用于任何可迭代的对象,实际上,对Python中所有会从左至右扫描对象的迭代工具而言都是如此,这些迭代工具包括了for循环、列表解析、in成员关系测试以及map内置函数等。...1、内嵌的模块是全局作用域; 2、全局作用域的作用范围仅限于单个文件; 3、每次对函数的调用都创建了一个新的本地作用域; 4、赋值的变量名除非声明为全局变量或非本地变量,否则均为本地变量。

1.2K20

Python 语法基础

列表与元组 ---- Python 支持多种复合数据类型,可将不同值组合在一。最常用的列表,是用方括号标注,逗号分隔的一组值。...不允许为元组中的单个元素赋值,当然,可以创建含列表等可变对象的元组。...虽然作用域是静态地确定的,但它们会被动态地使用。 在执行期间的任何时刻,会有 3 或 4 个命名空间可被直接访问的嵌套作用域: 最先搜索的最内部作用域包含局部名称。...从最近的封闭作用域开始搜索的任何封闭函数的作用域包含非局部名称,也包括非全局名称。 倒数第二个作用域包含当前模块的全局名称。 最外面的作用域(最后搜索)是包含内置名称的命名空间。...Python 的一个特殊规定是这样的: 如果不存在生效的 global 或 nonlocal 语句; 则对名称的赋值总是会进入最内层作用域。

54840
领券