我正在使用Python 3.x
执行以下代码,无法制定理由。
alist = [10,1000,100]
blist = alist
alist += [34]
print('alist after adding', alist) #this is reflected in blist too
print('change reflects in blist ', blist)
alist = 35 #but this is not reflected in blist
print('alist after assigning ', alist)
print('change not reflected blist ', blist)
您可以在以下链接中执行
我找不到理由,如果您遇到它,任何指示找到根本原因或您的调查结果都会有所帮助。
由于
答案 0 :(得分:3)
以下是发生的事情......
alist = [10,1000,100]
表示对list类型对象的alist引用。blist = alist
表示blist也指向与alist积分相同的对象类型,即列表。alist += [34]
向alist
添加34,结果将在alist
。 alist仍然引用类型为list
的对象。alist = 35
表示您已将alist
的引用类型从list
更改为int
,其值为35而不是list
。 blist
会显示列表,alist
会显示35。使用type(variable)
更好地了解,请检查此...
alist = [10,1000,100]
blist = alist
alist += [34]
print("BEFORE: type of alist", type(alist))
print("BEFORE: type of blist", type(blist))
alist = 35 #but this is not reflected in blist
print("AFTER: type of alist", type(alist))
print("AFTER: type of blist", type(blist))
示例运行
BEFORE: type of alist <class 'list'>
BEFORE: type of blist <class 'list'>
AFTER: type of alist <class 'int'>
AFTER: type of blist <class 'list'>
答案 1 :(得分:2)
声明alist += [35]
是alist.extend([35])
的简写。请参阅docs for extend。
变量 alist 是对列表的引用。此列表将附加35.由于变量blist是对同一列表的引用,因此同样发生。
将35
分配给变量alist
时,哪些alist引用了更改。它现在指向此值,blist仍引用该列表。
您在程序中创建的所有数据结构都存储在内存中,您的变量只是对这些内存的引用。某些操作将更改内存中引用的数据,例如extend
。变量赋值也会改变变量的含义。