Discuss / Python / 关于tuple里面list的赋值问题?

关于tuple里面list的赋值问题?

Topic source

龙风qqq

#32 Created at ... [Delete] [Delete and Lock User]

list = [X,Y]

#将指向[X,Y]数组内容赋值给list

list = ['A','B'] print(id(list)) #打印内存地址 59936896 list = ['X','Y'] print(id(list)) #打印内存地址 59940216 tuple 指向不变 指的是 指向的内存地址不变,至于里面是什么 其实不关心 所以 list[0] = 'X' list[1] = 'Y' 就能正确修改

xia_md

#33 Created at ... [Delete] [Delete and Lock User]

给list 赋新的值,创建了一个新的 列表对象 ,改变了list的引用,但是元组是不可变的,所以 元组中元素的引用是不可变的,所以 索引赋值 可以,因为不产生新的列表,

xia_md

#34 Created at ... [Delete] [Delete and Lock User]

t[2] is list False

云所无处

#35 Created at ... [Delete] [Delete and Lock User]

重新看了一下之前的章节,发现他的命令是这样输入的

t = ('a', 'b', ['A', 'B']) t[2][0] = 'X' t[2][1] = 'Y' t ('a', 'b', ['X', 'Y'])

他是在元组里指定了列表 [A B]

你是先给列表[A B]赋值了一个叫 list 的名称 但元组只是通过list这个名称指定了[AB]的值 你改变的list只是重新新建并指向了[xy]的值

所以你想修改list下[AB]也要这么输入

t[2][0]='x' t[2][1]='y'

Mr_RightMen

#36 Created at ... [Delete] [Delete and Lock User]

这个很好理解啊,所谓变量,其实就是一个符号指向内存中的数据 第一次,你的list 指向内存中的['A','B',]

而你的 t 则是指向内存中的('a','b',[第一次list指向的内容,也就是A B])

第二次,你的list 指向内存中的['X','Y'],这时候list的内容发生了改变

但是你的t 作为一个单独的变量,它的指向是没有变的,还是指向('a','b',['A','B',])

心如芷蕊

#37 Created at ... [Delete] [Delete and Lock User]

指向的地址没有变化,只是tuple下list元素的值发生改变,list可以堪称一个整体,但如果是tuple的话,改变单一的值其指向就会改变。

你这样写元组t中储存的元素肯定是第一个list['A','B'],而后面那个list=['X','Y']相当于你重新定义的一个列表,并没有运用上

python里面的变量都是类似指针,不是给变量赋值,而是让变量指向某个确定的对象。tuple['a','b',list]的时候,tuple[2]就已经指向list所指的对象了,而这时候你改变list的值(改变list指向的对象)并不会影响tuple[2]所指向的对象。(因为已经和list本身无关了)

HaloDreso

#40 Created at ... [Delete] [Delete and Lock User]

你可以在命令行里输入看下就明白了 当你输入: list = ['A','B'] t = ('a','b',list) 这个时候你输出t,可以看到t的值是: ('a', 'b', ['A', 'B']) 所以,你再修改list,跟t没什么关系了 只有在你对list重新定义再重新输入命令: t = ('a','b',list) 这个时候,t才会变

idea-lx

#41 Created at ... [Delete] [Delete and Lock User]

我也是刚学PYTHON,我按C++角度来理解这个问题,应该是你初始化t时仅仅将list的值拷贝了一份,然后赋值给了t,而不是把list的引用或者地址传给t,因此之后改变list和t的值是没有关系的。


Reply