关于tuple里面list的赋值问题?
Topic source重新看了一下之前的章节,发现他的命令是这样输入的
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'
这个很好理解啊,所谓变量,其实就是一个符号指向内存中的数据 第一次,你的list 指向内存中的['A','B',]
而你的 t 则是指向内存中的('a','b',[第一次list指向的内容,也就是A B])
第二次,你的list 指向内存中的['X','Y'],这时候list的内容发生了改变
但是你的t 作为一个单独的变量,它的指向是没有变的,还是指向('a','b',['A','B',])
python里面的变量都是类似指针,不是给变量赋值,而是让变量指向某个确定的对象。tuple['a','b',list]的时候,tuple[2]就已经指向list所指的对象了,而这时候你改变list的值(改变list指向的对象)并不会影响tuple[2]所指向的对象。(因为已经和list本身无关了)
你可以在命令行里输入看下就明白了 当你输入: list = ['A','B'] t = ('a','b',list) 这个时候你输出t,可以看到t的值是: ('a', 'b', ['A', 'B']) 所以,你再修改list,跟t没什么关系了 只有在你对list重新定义再重新输入命令: t = ('a','b',list) 这个时候,t才会变
我也是刚学PYTHON,我按C++角度来理解这个问题,应该是你初始化t时仅仅将list的值拷贝了一份,然后赋值给了t,而不是把list的引用或者地址传给t,因此之后改变list和t的值是没有关系的。
龙风qqq
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' 就能正确修改