数字的赋值
a = 1
b = a
b = 2
print(id(a))
print(id(b))
print(a,b)
输出结果如下:
140714399487648
140714399487680
1 2
从地址可以看到a和b并不是指向一个地址的变量,因此当改变b的值时,a的值并没有发生改变
字符串的赋值
a = 'I\'m a student'
b = a
b = 'I\'m a teacher'
print(id(a))
print(id(b))
print(a,b,sep='\n')
输出结果如下:
2004680948656
2004680948720
I'm a student
I'm a teacher
可以看到和数字一样,a和b的地址不同,因此改变b的内容时,a的内容保持不变
列表的赋值
a = [1,2]
b = a
print(id(a))
print(id(b))
print(a,b)
b.append(5)
print(a,b)
输出结果如下:
1824500025216
1824500025216
[1, 2] [1, 2]
[1, 2, 5] [1, 2, 5]
与字符串数字变量不同,列表的直接赋值将地址直接赋值,而不是开辟一个新的地址,有点类似于c语言中的引用&
那么我们该怎样做到像数字和字符串那样新开辟一个地址来存储复制的列表呢,目前笔者已知的有这样一种方法:
a = [1,2]
b = a[:]
print(id(a))
print(id(b))
print(a,b)
b.append(5)
print(a,b)
输出结果如下:
2493070772096
2493075406080
[1, 2] [1, 2]
[1, 2] [1, 2, 5]