• python中的赋值操作与C语言中的赋值操作中的巨大差别


    首先让我们来看一个简单的C程序:

    1 a = 8;
    2 b = a;
    3 b = 6;
    4 printf("a = %d, b = %d
    ",  a, b);
    View Code

    相信只要学过C语言, 不用运行程序便能知道程序将会打印出a = 8,  b = 6.

    现在让我们来看一看这个程序的python版本

    1 a = 8
    2 b = a
    3 b = 6
    4 print(a, b)
    View Code


    让我们来看一看运行结果:

    似乎一切都正常。

    不,要是真的是那么简单,那要我干嘛!!!

    看,程序又来了。。。

    1 name = ['fujian', 'beijing', 'shanghai']
    2 name2 = name
    3 name2[1] = 'tainjing'
    4 print(name)
    5 print(name2)
    python程序


    结果是不是还是我们所想的那样:

    ['fujian', 'beijing', 'shanghai']

    ['fujian', 'tainjing', 'shanghai']

    可现实是:

     

     Why!Why!Why!

    原因如下:

      1. c语言中的变量好比一个盒子,a = 8就好比将8这个数据放入了这个名为a的盒子中;而python在这一方面与C语言可算是天壤之别;

        python中的变量有点类似C语言中指针, a = 8在python中就好比a 指向了8这个数据.

      2. python中的每一次赋值都是将变量指向一个新的的数据(位置)

    现在我们在回过头来看一看这两个python程序,

      一:

          a = 8

          b = a

          b = 6

      首先语句a = 8说明变量a指向了8这个数据;

      接着语句a = b说明变量b指向了a,也就等同与a与b一起指向了8这个数据;

      最后语句b = 6,说明此时变量b的指向已经发生了改变, 但是变量a的指向并没有改变,变量b现在指向了6这个数据,变量a还是指向原来的数据8;

      所以最后会打印出a = 8,  b = 6.

      二:

        name = ["fujian", "beijing", "shanghai"]

        name2 = name

        name2[1] = "tianjing"

         

        同样我们可以类似上一个程序那样分析:

        首先第一条语句说明变量name指向了一个列表;

        第二条语句说明变量name2与name指向了同一个列表;

        第三条语句的分析非常重要:   

        请注意

        name[1]其实也可以看成是一个‘变量’,只不过这个变量是属于name所指向的列表的一部分,它原先是指向“beijing”这个字符串,

        现在经过第三条语句后,变量name[1]就改变了指向,指向了“tianjing"这个字符串了;这样也恰好改变了列表中的内容。

        再加上最终name与name2还是指向最初的那个列表(只不过这个列表‘更新’了),

        所以现在问题不就解决了!!!

        如果您发现以上信息有问题,请及时留言,谢谢!

      

  • 相关阅读:
    编写第一个 .NET 微服务
    Docker 基础知识编排在开发机上设置和使用 Kubernetes 环境
    将微服务部署到 Azure Kubernetes 服务 (AKS) 实践
    .NET Task.Run vs Task.Factory.StartNew
    Python上下文管理器
    Python可迭代的对象与迭代器的对比
    开发你的第一个SpringBoot应用
    Flask的Blueprints和Views
    Flask项目发布流程
    长篇大论Python生成器
  • 原文地址:https://www.cnblogs.com/ReturnOfTheKing/p/11299977.html
Copyright © 2020-2023  润新知