为什么更改1列表会影响另一个?

编程入门 行业动态 更新时间:2024-10-11 19:25:38
本文介绍了为什么更改1列表会影响另一个?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧! 问题描述

对于python来说,我是一个新手,当今天使用 列表时,我注意到一些非常奇怪的行为,任何建议 欢迎: Python 2.2.3(#1,2003年11月6日,14:12:38) [GCC 3.3.2 20031022(Gentoo Linux 3.3.2-r2) ,bootolice)] on linux2 输入help,copyright,credit等等。或许可证或更多信息。

firstlist = [''item1'',''item2'',''item2''] secondlist = firstlist print(firstlist,secondlist)([''item1'',''item2'',''item2''],[''item1'','' item2'',''item2''])firstlist [0] =''strangeness'' print(firstlist,secondlist)([''strangeness'',''item2'',' 'item2''],[''strangeness'',''item2'',''item2''])

为什么改变一个列表会影响另一个列表?它驱使我 疯了!

解决方案

oom< oo *@xxnospamxx.ps.gen .NZ>写道:

当谈到python时,我有点新手,今天使用列表我注意到一些非常奇怪的行为,任何建议欢迎: Python 2.2.3(#1,2003年11月6日,14:12:38) [GCC 3.3.2 20031022(Gentoo Linux 3.3.2-r2,propolice)] on linux2 输入help,copyright,credit等。或许可证或更多信息。

firstlist = [''item1'',''item2'',''item2''] secondlist = firstlist print(firstlist,secondlist)([''item1'',''item2'',''item2''],[''item1'',''item2'',''item2''] firstlist [0] =''陌生''打印(firstlist,secondlist)([''strangeness'',''item2'',''item2''],[''strangeness'''''item2 '',''item2''])

为什么改变一个列表会影响另一个列表?这让我感到疯狂!

因为当你说secondlist = firstlist时,你没有复制 $ b $在列表中,您只是对现有列表另外引用 对象。如果你已经习惯了C / C ++,可以把它想象成传递一个指针 。 如果你真的想要制作一个新的列表,你应该看看副本 模块(特别是copy.deepcopy)。或者,有点简单,你可以 刚刚说了secondlist = list(firstlist),它创建了一个新的 (有点像复制构造函数可能在C ++中做的) 。

On Thu,2003年11月6日16:36:08 +1300,oom写道:

firstlist = [''item1'',''item2'',''item2''] 创建一个包含三个字符串对象的列表对象,并将 名称''firstlist''绑定到列表对象。 secondlist = firstlist 绑定名称''第二列表''到同一个列表对象。 print(firstlist,secondlist)([''item1'',''item2'',''item2''],[''item1'' ,''item2'',''item2'']) 输出相同的列表对象两次,因为它绑定到两个 ''firstlist ''和''secondlist''。

firstlist [0] =''strangeness'' 改变列表对象。 print(firstlist,secondlist)([' 'strangeness',''item2'',''item2''],[''strangeness'',''item2'',''item2''])

两次输出相同的列表对象,因为它绑定到''firstlist''和''secondlist''。 为什么改变一个列表影响其他名单?它让我感到疯狂!

因为只有一个列表,有两个不同的名字。这是''secondlist = firstlist''的结果。 您可能希望操作系统获取列表对象的*副本*,以及绑定 ''secondlist''到那个新对象。对于某些 类型(例如标量)而言,这会自动发生,但不会出现列表或dicts或其他结构化类型。

import copy firstlist = [' 'item1'',''item2'',''item3''] secondlist = copy.copy(firstlist) print(firstlist,secondlist)([''item1''' ,''item2'',''item3''],[''item1'',''item2'',''item3''])firstlist [0] =''no_strangeness'' print( firstlist,secondlist)([''no_strangeness'',''item2'',''item3''],[''item1'',''item2'',''item3''])

- \很难相信一个人在说实话的时候你了| ` \如果你在他的位置,你就会撒谎。 - Henry L. | _o__)Mencken | Ben Finney< bignose.squidly/>

2003年11月5日星期三23:05:30 -0500,Roy Smith< ro*@panix>写道:

oom< oo *@xxnospamxx.ps.gen.nz>写道:

当谈到python时,我有点新手,今天使用列表我注意到一些非常奇怪的行为,任何建议欢迎: Python 2.2.3(#1,2003年11月6日,14:12:38) [GCC 3.3.2 20031022(Gentoo Linux 3.3.2-r2,propolice)] on linux2 输入help,copyright,credit等。或许可证或有关更多信息。

>>> firstlist = [''item1'',''item2'',''item2''] >>> secondlist = firstlist >>> print(firstlist,secondlist)

([''item1'',''item2'',''item2''],[''item1'',''item2'','' item2''])

>>> firstlist [0] =''陌生''>>> print(firstlist,secondlist)

([''strangeness'',''item2'',''item2''],[''strangeness'''''item2'''''' item2''])

>>>

为什么更改一个列表会影响另一个列表?它让我感到疯狂!

因为当你说secondlist = firstlist时,你没有复制列表,你是只是另外引用现有的列表对象。如果你已经习惯了C / C ++,可以把它想象成一个指针。 如果你真的想要制作一个新的列表,你应该看一下这个副本。 />模块(特别是copy.deepcopy)。或者,稍微简单一点,你可以刚刚说了secondlist = list(firstlist),它创建了一个新的(有点像复制构造函数可能在C ++中做的那样)。

非常感谢Ben和Roy !! 我怀疑这样的事情正在发生,但是头脑是什么? $ b $我抓了一个刮刮的会议! 这是一个非常活跃的NG ;-) 问题解决了

I am a bit of a newbie when it comes to python, when working with lists today I noticed some very odd behaviour, any suggestions welcome: Python 2.2.3 (#1, Nov 6 2003, 14:12:38) [GCC 3.3.2 20031022 (Gentoo Linux 3.3.2-r2, propolice)] on linux2 Type "help", "copyright", "credits" or "license" for more information.

firstlist=[''item1'',''item2'',''item2''] secondlist=firstlist print (firstlist,secondlist) ([''item1'', ''item2'', ''item2''], [''item1'', ''item2'', ''item2'']) firstlist[0]=''strangeness'' print (firstlist,secondlist) ([''strangeness'', ''item2'', ''item2''], [''strangeness'', ''item2'', ''item2''])

why does altering one list affect the other list ? it is driving me insane!

解决方案

oom <oo*@xxnospamxx.ps.gen.nz> wrote:

I am a bit of a newbie when it comes to python, when working with lists today I noticed some very odd behaviour, any suggestions welcome: Python 2.2.3 (#1, Nov 6 2003, 14:12:38) [GCC 3.3.2 20031022 (Gentoo Linux 3.3.2-r2, propolice)] on linux2 Type "help", "copyright", "credits" or "license" for more information.

firstlist=[''item1'',''item2'',''item2''] secondlist=firstlist print (firstlist,secondlist) ([''item1'', ''item2'', ''item2''], [''item1'', ''item2'', ''item2'']) firstlist[0]=''strangeness'' print (firstlist,secondlist) ([''strangeness'', ''item2'', ''item2''], [''strangeness'', ''item2'', ''item2''])

why does altering one list affect the other list ? it is driving me insane!

Because when you say secondlist = firstlist, you''re not making a copy of the list, you''re just making another reference to the existing list object. If you''re used to C/C++, think of it as passing a pointer around. If you really wanted to make a new list, you should look at the copy module (specifically copy.deepcopy). Or, somewhat simplier, you could have just said secondlist = list (firstlist), which creates a new one (kind of like a copy constructor might do in C++).

On Thu, 06 Nov 2003 16:36:08 +1300, oom wrote:

firstlist=[''item1'',''item2'',''item2''] Creates a list object, containing three string objects, and binds the name ''firstlist'' to the list object. secondlist=firstlist Binds the name ''secondlist'' to the same list object. print (firstlist,secondlist) ([''item1'', ''item2'', ''item2''], [''item1'', ''item2'', ''item2'']) Outputs the same list object twice, since it is bound to both ''firstlist'' and ''secondlist''.

firstlist[0]=''strangeness'' Alters the list object. print (firstlist,secondlist) ([''strangeness'', ''item2'', ''item2''], [''strangeness'', ''item2'', ''item2''])

Outputs the same list object twice, since it is bound to both ''firstlist'' and ''secondlist''. why does altering one list affect the other list ? it is driving me insane!

Because there''s only one list, with two different names. This is a result of ''secondlist = firstlist''. What you probably want os to take a *copy* of the list object, and bind ''secondlist'' to that new object. This occurs automatically for some types (e.g. scalars) but not lists or dicts or other structured types.

import copy firstlist = [ ''item1'', ''item2'', ''item3'' ] secondlist = copy.copy( firstlist ) print( firstlist, secondlist ) ([''item1'', ''item2'', ''item3''], [''item1'', ''item2'', ''item3'']) firstlist[0] = ''no_strangeness'' print( firstlist, secondlist ) ([''no_strangeness'', ''item2'', ''item3''], [''item1'', ''item2'', ''item3''])

-- \ "It is hard to believe that a man is telling the truth when you | `\ know that you would lie if you were in his place." -- Henry L. | _o__) Mencken | Ben Finney <bignose.squidly/>

On Wed, 05 Nov 2003 23:05:30 -0500, Roy Smith <ro*@panix> wrote:

oom <oo*@xxnospamxx.ps.gen.nz> wrote:

I am a bit of a newbie when it comes to python, when working with lists today I noticed some very odd behaviour, any suggestions welcome: Python 2.2.3 (#1, Nov 6 2003, 14:12:38) [GCC 3.3.2 20031022 (Gentoo Linux 3.3.2-r2, propolice)] on linux2 Type "help", "copyright", "credits" or "license" for more information.

>>> firstlist=[''item1'',''item2'',''item2''] >>> secondlist=firstlist >>> print (firstlist,secondlist)

([''item1'', ''item2'', ''item2''], [''item1'', ''item2'', ''item2''])

>>> firstlist[0]=''strangeness'' >>> print (firstlist,secondlist)

([''strangeness'', ''item2'', ''item2''], [''strangeness'', ''item2'', ''item2''])

>>>

why does altering one list affect the other list ? it is driving me insane!

Because when you say secondlist = firstlist, you''re not making a copy ofthe list, you''re just making another reference to the existing listobject. If you''re used to C/C++, think of it as passing a pointeraround.If you really wanted to make a new list, you should look at the copymodule (specifically copy.deepcopy). Or, somewhat simplier, you couldhave just said secondlist = list (firstlist), which creates a new one(kind of like a copy constructor might do in C++).

Well thanks to both Ben and Roy!! I suspected something like this was going on, but what a head scratching session I had! This is a very active NG ;-) problem solved

更多推荐

为什么更改1列表会影响另一个?

本文发布于:2023-10-18 15:46:07,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1504661.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:列表

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!