什么';python中list1=[]list2=[]和list1=list2=[]之间的区别是什么?
我刚开始使用python,我正在尝试使用列表理解初始化两个列表。像这样什么';python中list1=[]list2=[]和list1=list2=[]之间的区别是什么?,python,list,list-comprehension,Python,List,List Comprehension,我刚开始使用python,我正在尝试使用列表理解初始化两个列表。像这样 list1 = list2 = [0.0] * 57 当我这样做并用值插入这些列表时,与单独初始化这些列表时得到的值相比,我得到了一组不同的值(不正确的值)。像 list1 = [0.0] * 57 list2 = [0.0] * 57 第一个病例发生了什么?为什么这两个案例的答案不同 第一个选项将list1和list2设置为都指向同一个列表。第二个列表为每个名称定义一个新列表。在下面的例子中,您创建一个列表,并使两个变
list1 = list2 = [0.0] * 57
当我这样做并用值插入这些列表时,与单独初始化这些列表时得到的值相比,我得到了一组不同的值(不正确的值)。像
list1 = [0.0] * 57
list2 = [0.0] * 57
第一个病例发生了什么?为什么这两个案例的答案不同 第一个选项将
list1
和list2
设置为都指向同一个列表。第二个列表为每个名称定义一个新列表。在下面的例子中,您创建一个列表,并使两个变量指向它;i、 e.2对同一对象的引用:
list1 = list2 = [123] * 3
list1.append(456)
print list1 => # prints [123, 123, 123, 456]
print list2 => # prints [123, 123, 123, 456]
print list1 is list2 # prints True
而这将创建两个新列表,并将其中一个分配给list1
,另一个分配给list2
:
list1 = [123] * 3
list2 = [123] * 3
# or list1, list2 = [123] * 3, [123] * 3
list1.append(456)
print list1 # prints [123, 123, 123, 456]
print list2 # prints [123, 123, 123]
print list1 is list 2 # prints False
这与是否通过引用将值复制或存储在变量中有关。对于整数和字符串等不可变对象,这并不重要:
# a and b contain the same int object
# but it's OK because int's are immutable
a = b = 1
a += 2 # creates a new int from 1+2 and assigns it to `a`
print b # => 1 ... b is unchanged
print a # => 3
换句话说,
int
s(norfloat
s或str
s等)没有方法可以更改调用该方法的值;相反,它们都返回该类型的新实例;因此-5
返回一个新的int-5
而不是现有的int5
修改;另外,a+=2
相当于a=a+2
,其中a+2
(即在a上调用的方法\uuuuu add\uuuu
)返回一个新的int,其值为a+2
,对该int的引用被分配回a,我的猜测是首先计算方程的RHS,然后计算LHS。不过我不知道解释器中的求值顺序。@squiguy不知道,这是因为两个变量都绑定到同一个list.Ohh。知道了。谢谢接下来,当使用num1=num2=num3=0.0这样的普通数字时,这种方法似乎工作得很好。除此之外,没有任何问题。为什么?@Pradep:number(以及字符串和其他一些数据类型)是不可变的。不能更改0
的值,但可以更改列表的元素。这就是为什么这很重要。