python变量传递

数值

  • 代码
num_1 = 123
num_2 = num_1
# 改变num_2值前
print 'num_1 = {0}, num_2 = {1}'.format(num_1, num_2)
num_2 = 0
# 改变num_2值后
print 'num_1 = {0}, num_2 = {1}'.format(num_1, num_2)
  • 输出
num_1 = 123, num_2 = 123
num_1 = 123, num_2 = 0
  • 结论

数值变量之间的是按值传递。

字符串

  • 代码
str_1 = 'hello python'
str_2 = str_1
# 改变str_2值前
print 'str_1 = {0}, str_2 = {1}'.format(str_1, str_2)
str_2 = 'hello'
# 改变str_2值后
print 'str_1 = {0}, str_2 = {1}'.format(str_1, str_2)
  • 输出
str_1 = hello python, str_2 = hello python
str_1 = hello python, str_2 = hello
  • 结论

字符串变量之间也是按值传递。

链表

  • 代码
l_1 = [1, 2, 3, 4]
l_2 = l_1
print 'l_1 = {0}, l_2 = {1}'.format(l_1, l_2)
l_2[0] = 100 # 改变l_2的第一个元素
print 'l_1 = {0}, l_2 = {1}'.format(l_1, l_2)
l_2 = [1,1,1] # 改变l_2的全部元素
print 'l_1 = {0}, l_2 = {1}'.format(l_1, l_2)
  • 输出
l_1 = [1, 2, 3, 4], l_2 = [1, 2, 3, 4]
l_1 = [100, 2, 3, 4], l_2 = [100, 2, 3, 4]
l_1 = [100, 2, 3, 4], l_2 = [1, 1, 1]
  • 结论

从上面的输出结果可以看到,l_1l_2的作用类似于c/c++中的指针,l_2 = l_1的作用相当于l_2l_1指向了同一块内存,内容都为[1, 2, 3, 4]。当l_2[0] = 100时,l_1中的第一个元素也被改变了。l_2 = [1,1,1]使得l_2指向了另外一块内存,也就不会对l_1的内容造成影响。

字典

  • 代码
d_1 = {'a': 1, 'b': 2, 'c': 3}
d_2 = d_1
print 'd_1 = {0}, d_2 = {1}'.format(d_1, d_2) d_2['c'] = 10
print 'd_1 = {0}, d_2 = {1}'.format(d_1, d_2) d_2 = {'e': 12, 'f': 15}
print 'd_1 = {0}, d_2 = {1}'.format(d_1, d_2)
  • 输出
d_1 = {'a': 1, 'c': 3, 'b': 2}, d_2 = {'a': 1, 'c': 3, 'b': 2}
d_1 = {'a': 1, 'c': 10, 'b': 2}, d_2 = {'a': 1, 'c': 10, 'b': 2}
d_1 = {'a': 1, 'c': 10, 'b': 2}, d_2 = {'e': 12, 'f': 15}
  • 结论

输出结果显示dict和list的性质一样,直接赋值时是类似于c++中的按引用传递。

对象

  • 代码
class Point:
def __init__(self, x, y):
self.x = x
self.y = y
def __str__(self):
return ''.join(['x = ', str(self.x), ' ', 'y = ', str(self.y)]) p_1 = Point(12,34)
p_2 = p_1
print 'p_1: {0}; p_2: {1}'.format(p_1, p_2) p_2.x = 122
print 'p_1: {0}; p_2: {1}'.format(p_1, p_2) p_2 = Point(89, 978)
print 'p_1: {0}; p_2: {1}'.format(p_1, p_2)
  • 输出
p_1: x = 12 y = 34;  p_2: x = 12 y = 34
p_1: x = 122 y = 34; p_2: x = 122 y = 34
p_1: x = 122 y = 34; p_2: x = 89 y = 978
  • 结论

自定义对象在赋值过程中也是按引用传递。

总结

Python中数值,字符串在赋值过程中是按值传递;listdict、对象在赋值过程中默认按引用传递,如果需要按值传递,则可以使用到copy模块下的copydeepcopy函数。

python变量传递的更多相关文章

  1. python变量传递给系统命令的方法

    python程序内执行shell命令可以有几种方式,在http://www.cnblogs.com/xuxm2007/archive/2011/01/17/1937220.html 里都有详细介绍. ...

  2. python的变量传递

    python中变量都被视为对象的引用.python函数调用传递参数的时候,不允许程序员选择传值还是传引用,python参数传递采用的都是“传对象引用”的方式.     这种方式相当于传值和传引用的结合 ...

  3. shell调用python脚本,并且向python脚本传递参数

    1.shell调用python脚本,并且向python脚本传递参数: shell中: python test.py $para1 $para2 python中: import sys def main ...

  4. openssh安装、设置指定端口号、免密码登录、变量传递、防暴力破解

    首先确保机器挂在好光盘镜像,然后查看软件包信息 [root@xuegod63 ~]# df -hFilesystem      Size  Used Avail Use% Mounted on/dev ...

  5. Python 变量作用域与函数

    Python 的创始人为吉多·范罗苏姆(Guido van Rossum).1989年的圣诞节期间,吉多·范罗苏姆为了在阿姆斯特丹打发时间,决心开发一个新的脚本解释程序,作为ABC语言的一种继承.Py ...

  6. 『无为则无心』Python函数 — 29、Python变量和参数传递

    目录 1.Python的变量 (1)Python变量不能独立存在 (2)变量是内存中数据的引用 (3)注意点 2.了解变量的引用 3.Python的参数传递(重点) (1)示例 (2)结论 (3)总结 ...

  7. Python 变量类型

    Python 变量类型 变量存储在内存中的值.这就意味着在创建变量时会在内存中开辟一个空间. 基于变量的数据类型,解释器会分配指定内存,并决定什么数据可以被存储在内存中. 因此,变量可以指定不同的数据 ...

  8. Python变量、数据类型6

    1.Python变量 变量,即代表某个value的名字. 变量的值存储在内存中,这意味着在创建变量时会在内存中开辟一个空间. !!!即值并没有保存在变量中,它们保存在计算机内存的深处,被变量引用.所以 ...

  9. atitit.web的动态include 跟变量传递 java .net php

    atitit.web的动态include 跟变量传递 java .net php 1. 动态include  <jsp:include 1 2. 使用QueryString 1 3. 使用Ses ...

随机推荐

  1. unity UGUI UI跟随

    实现2dUI跟随游戏中角色的移动(应用于玩家名称,血条,称号) using UnityEngine; public class UI_Follow : MonoBehaviour { public C ...

  2. 大话npm,cnpm和yarn

    npm:基于node.js的包管理工具; 常用命令 npm install 包名; 缺点:因服务器在国外,所以下载包的速度超级慢,所以出现了cnpm和yarn cnpm:跟npm是一样的,这是淘宝出的 ...

  3. 网页布局要注意的事项,以及CSS3需要特别注意的地方。

    overflow: hidden; white-space: nowrap; text-overflow: ellipsis;隐藏超出部分,出省略号 一定要先布局!布局!布局!要先设置好色块,将位置确 ...

  4. 常用模块 time sys os json pickle

    # import time # print(time.time()) #秒数 # print('开始下载') # time.sleep(2) # print('下载完成') # print(time. ...

  5. Flutter 控件之 Routes 和 Navigator. [PopupRoute]

    一个 App 通常会有多个界面,每个界面实现不同的功能,并在多个界面之间跳转.在 Flutter 中多个界面的跳转是通过 Navigator 来实现的. 在 Flutter 中定义了一个 Overla ...

  6. UI自动化(六)js

    HTML中的三把利器的JS 又称为JavaScript,看着好像和Java有点联系,实际上他和java半毛钱关系都没有,JavaScript和我们学习的Python.Go.Java.C++等,都是一种 ...

  7. 剑指offer(51)构建乘积数组

    题目描述 给定一个数组A[0,1,...,n-1],请构建一个数组B[0,1,...,n-1],其中B中的元素B[i]=A[0]*A[1]*...*A[i-1]*A[i+1]*...*A[n-1].不 ...

  8. 进程池 和 multiprocessing.Pool模块

    进程池的概念 在程序实际处理问题过程中,忙时会有成千上万的任务需要被执行,闲时可能只有零星任务.那么在成千上万个任务需要被执行的时候,我们就需要去创建成千上万个进程么?首先,创建进程需要消耗时间,销毁 ...

  9. 使用RStudio调试(debug)基础学习(一)

    点击行号的左侧,即可设置断点(或者按下Shift+F9),如果没有出现,反而出现下图的警告: 那么只是因为我的坏习惯--写一段脚本测试的时候都是新建,但不save到本地,不喜欢保存,写的差不多了才开始 ...

  10. P1908 逆序对

    传送门 这题似乎不应该出现在这里.. 日常做法(归并): #include<iostream> #include<cstdio> #include<algorithm&g ...