python 中的变量赋值和 swap(a, b)

标签: swap 内存 变量赋值
3人阅读 评论(0) 收藏 举报
分类:

    python 中为什么不需要 swap() 函数,而只需要执行:

    a, b = b, a

    就可以交换 a,b 的值呢?

    这是因为在 python 中,变量所指向的都是一个对象,以引用的方式来使用对象。

    以 a = 1 为例,python 中首先给 “1”分配一个地址,然后把 “1”放进去,即在“地址 1 ”中放入“1”,然后让 a 指向这个地址(a 也就是 C++ 中的指针)。

    这时候,如果我们再定义一个 b = 1 ? 

    因为 "1" 已经存放到“地址 1”中了,所以直接可以让 b 指向“地址 1 ”就可以了。

    我们以一段代码来表示这个过程:

a = 1
b = 1
print(id(a), id(b)) # id(a)输出 a 所指向的地址

    输出:

    1727058992 1727058992

    具体值可能不同,但两个值一定相同,也就是说明了 a, b 其实是指向了同一个地址中的 value。


    下面说明 a, b = b, a 的实现。

    首先来段代码:

a = 1
b = 2
print(id(a), id(b)) # id(a)输出 a 所指向的地址
a, b = b, a
print(id(a), id(b))

    输出:

    1727058992 1727059008
    1727059008 1727058992

    a 指向“地址1",b指向 "地址2”,执行 a, b = b, a 时,其实只是交换了这两个指针所指向的地址,并没有对具体的 value 的改变,所以不需要 swap() 函数,

查看评论

不使用临时变量的swap再思考 -- 六种解法

不使用临时变量的swap 一道经典的面试题如下:两个int型变量a和b,不使用临时变量,交换它们的值。 答案相信大家都耳熟能详了: a = a ^ b; b = a ^ b; a = a ^ b; ...
  • caozhankui
  • caozhankui
  • 2014-03-01 04:40:39
  • 7061

不用中间变量实现交换swap的问题

我们在实现交换的时候一般都是用一个中间变量来暂存: void swap(int& a, int& b) { int temp = a; //exchange a = b; b = temp;...
  • YoungStunner
  • YoungStunner
  • 2016-03-08 12:46:01
  • 1066

swap(a,b)四种方法

方法一: 这个方法算是使用率最高的一个方法,我都用函数来写,比较好看点 void  swap(int &a,int &b) { int temp = 0;         temp = a; a = ...
  • wujiafei_njgcxy
  • wujiafei_njgcxy
  • 2016-09-26 19:19:11
  • 768

[python]条件运算符 x = 条件 and a or b

现在大部分高级语言都支持“?”这个三元运算符(ternary operator),它对应的表达式如下:condition ? value if true : value if false。很奇...
  • cn_wk
  • cn_wk
  • 2016-03-28 10:42:02
  • 3611

Python 变量赋值过程

Python中,变量的赋值过程与C, C++, JAVA均是不同的。这几种语言都是先定义了一个变量,并在内存中为这一变量分配了空间,然后当赋值时,直接往这个空间写数据就可以了。所以变量的内存地址是不变...
  • u012083681
  • u012083681
  • 2013-12-18 22:27:40
  • 1567

C 语言swap(a,b)值交换的几种实现方法

从学习开始,就开始学习C语言。书本上介绍的swap程序很基础,我在网络上查看了关于swap程序的设计。 有很多,列举了以下四种方法。 //以下是原程序,VC++6.0编译通过。 /*******...
  • Scalpelct
  • Scalpelct
  • 2016-08-17 00:55:55
  • 1951

Python学习笔记(1)变量、循环

最近在codecademy上学习Python, 这是一个非常注意实践的操作平台,每讲解一点内容就让人做一些练习,讲解点也设计得非常适合Python零基础的人学习。讲到了变量,list, dicti...
  • feliciafay
  • feliciafay
  • 2014-04-12 06:33:44
  • 3438

Python 中怎么写 swap()交换函数

******Python 不需要交换函数swap(),如果要交换a,b的话,只需要使用如下语句: a,b = b,a 即可(因为:Python以引用方式管理对象,你可以交换引用,...
  • hyqsong
  • hyqsong
  • 2015-08-22 21:44:57
  • 3879

解读宏#define SWAP(a,b)

忽然想起上个月参加的各种宣讲会被各个笔试爆,想起里面有个是写宏的。 我当初就蒙了,我用过最简单 #define max(a,b)    (a+b); 类似这样的。然后今天就搜了一下,发现有个很神奇的 ...
  • u014646950
  • u014646950
  • 2016-06-07 14:37:59
  • 842

通过调用函数实现a与b的交换

刚才通过汇编大略理解C了语言的指针如下题目可以更好的佐证: void swap(int i, int j){    int temp;    temp = i;    i = j;    j = te...
  • xxirvana
  • xxirvana
  • 2010-01-29 18:39:00
  • 455
    个人资料
    等级:
    访问量: 360
    积分: 176
    排名: 107万+
    文章存档
    最新评论