变量赋值
list1 = ["1","2","3","4"]list2 = list1
list1.append('5')
list2.append('6')
print(list1)
print(list2)
这段代码得到的两个列表是相同的,都是['1', '2', '3', '4', '5', '6']。我的问题是既然list2 = list1表示将 list1 这个变量赋值给 list2,为什么增加 list2 列表中的元素也会改变 list1? >>> a=[]
>>> b=a
>>> id(a)
30430216
>>> id(b)
30430216
这里的a 和b 你可以简单理解为一个东西 list1 = ["1","2","3","4"]
list2 = list1
list1.append('5')
list2.append('6')
print(list1)
print(list2)
print(id(list1))
print(id(list2))
两个列表地址是一样的,所以你在哪个列表加元素都是一样的 wp231957 发表于 2021-6-8 10:48
>>> a=[]
>>> b=a
>>> id(a)
a = 1
b = 2
b = a
b = 3
print(a)
print(b)
请问这段代码为什么得到的a和b的值不一样呢?a=1,b=3 Nakupenda_wewe 发表于 2021-6-8 10:59
请问这段代码为什么得到的a和b的值不一样呢?a=1,b=3
是的,你可以搜一下哈希 本帖最后由 Twilight6 于 2021-6-8 11:04 编辑
因为 list1、list2 这两个变量所指向的 id 即内存地址相同
你的 list1 = ["1","2","3","4"] 实际上是将列表["1","2","3","4"] 的内存地址赋值给 list1
而你list2 = list1 此时也是将 列表["1","2","3","4"] 的内存地址赋值给 list2
所以 list1、list2 都指向这个地址的数据,只要列表["1","2","3","4"] 发生改变,指向这个内存地址的变量肯定随之改变
你后来的 int 这些是因为是不可变对象,Python 会将不可变变量相同的值指向同一内存地址,节省内存消耗,而不同的值肯定需要重新开辟内存
相当于list1以及list2同指向一个地址,所以会发生改变 我明白了,谢谢大家! 字符串是不可变的,所以你重新赋值b=3,得新生成一个内存地址,而列表是可变的,所以,list1和list2其实都是同一个列表,它并没有新生成一个列表,一直都一个内存地址一样的列表
页:
[1]