zoukankan      html  css  js  c++  java
  • 给变量赋值 字符串 和 列表(字典)时的区别

    变量赋值

    用字符串给变量赋值

     1 name1="我叫金三顺"
     2 name2=name1
     3 print ('name1 is : %s' % name1,'
    name2 is : %s ' % name2)
     4 name1="我叫金四顺"
     5 print ('name1 is : %s' % name1,'
    name2 is : %s ' % name2)
     6 name2="我叫金五顺"
     7 print ('name1 is : %s' % name1,'
    name2 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,'
    listb is : %s ' % b)
    4 a.append(9)
    5 print ('lista is : %s' % a,'
    listb is : %s ' % b)
    6 b.append(100)
    7 print ('lista is : %s' % a,'
    listb 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里的实现算法是直接返回对象所在内存地址。
  • 相关阅读:
    PA
    核电站问题(codevs 2618)
    [转]SQL SERVER 的排序规则
    C# 窗体控件输入框大写
    查看哪些端口被使用
    [转]Windows服务“允许服务与桌面交互”的使用和修改方法
    [转]OBJECT_ID 有哪些种类
    如何:对 Windows 窗体控件进行线程安全调用
    老人手机不要买山寨机
    VBA文本型数字变成数值
  • 原文地址:https://www.cnblogs.com/wumingxiaoyao/p/5694274.html
Copyright © 2011-2022 走看看