首页 > 编程语言 > 详细

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

时间:2019-08-04 22:03:52      阅读:106      评论:0      收藏:0      [点我收藏+]

 

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

技术分享图片
1 a = 8;
2 b = a;
3 b = 6;
4 printf("a = %d, b = %d\n",  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还是指向最初的那个列表(只不过这个列表‘更新’了),

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

 

 

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

 

  

 

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

原文:https://www.cnblogs.com/ReturnOfTheKing/p/11299977.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!