变量赋值
用字符串给变量赋值
1 name1="我叫金三顺" 2 name2=name1 3 print ('name1 is : %s' % name1,'\nname2 is : %s ' % name2) 4 name1="我叫金四顺" 5 print ('name1 is : %s' % name1,'\nname2 is : %s ' % name2) 6 name2="我叫金五顺" 7 print ('name1 is : %s' % name1,'\nname2 is : %s ' % name2) 8 print (id(name1)) 9 print (id(name2)) 10 #字符串赋值。会对name2单独开放内存空间,所以修改name1不影响name2,修改name2也不会影响name1
下面是输出结果:
name1 is : 我叫金三顺
name2 is : 我叫金三顺
name1 is : 我叫金四顺
name2 is : 我叫金三顺
name1 is : 我叫金四顺
name2 is : 我叫金五顺
5094624
5094672
可见内存地址不一样。
下面再试试列表:
1 a=[1,2,4,5,6] 2 b=a 3 print ('lista is : %s' % a,'\nlistb is : %s ' % b) 4 a.append(9) 5 print ('lista is : %s' % a,'\nlistb is : %s ' % b) 6 b.append(100) 7 print ('lista is : %s' % a,'\nlistb is : %s ' % b) 8 print (id(a)) 9 print (id(b))
输出结果:
lista is : [1, 2, 4, 5, 6]
listb is : [1, 2, 4, 5, 6]
lista is : [1, 2, 4, 5, 6, 9]
listb is : [1, 2, 4, 5, 6, 9]
lista is : [1, 2, 4, 5, 6, 9, 100]
listb is : [1, 2, 4, 5, 6, 9, 100]
2565984
2565984
可见内存地址一致。
得出结论:列表不会在单独分配内存空间。这一点和字符串不同。
至于为什么会有这种不同,天蓬元帅说:"
出于设计考虑字符串一般设置了后不会随便修改他的内容,但是列表字典会。
"
"
如果你用字典在上述实验,会发现字典和列表一样。
至此,本知识点结束。
顺便还学习了id函数:
id函数是返回对象object的标识符,标识符类型为整数,在同一个时间里所有对象的标识符是唯一的,如果在不同生命周期的对象有可能有相同的标识符。比如创建对象A之后,再删除A,再创建对象B,对象A与对象B可能有相同的标识符。在CPython里的实现算法是直接返回对象所在内存地址。