当前位置: 首页 > 面试题库 >

Python简单交换功能

许阿苏
2023-03-14
问题内容

尝试学习python时遇到了这个问题。考虑以下功能:

def swap0(s1, s2):
    assert type(s1) == list and type(s2) == list
    tmp = s1[:]
    s1 = s2[:]
    s2 = tmp
return

s1 = [1]
s2 = [2]
swap0(s1, s2)
print s1, s2

s1和s2将打印什么?

运行该问题后,我发现print语句将打印12。似乎s1和s2的值未从swap0函数中更改。我能想到的唯一解释是因为线条。

tmp = s1[:]

由于s1 [:]是一个副本,因此有道理s1的值在函数调用中不会改变。但是,因为的参数swap0是(s1,s2),所以不确定tmp = s1
[:]之后是否。每当我做

s1 = something...

它是对s1副本的引用,而不是s1本身。有人可以提供更好的解释吗?谢谢。


问题答案:

这是因为它赋予新值s1s2内部swap0html" target="_blank">功能。这些分配不会在函数外传播。如果仅将函数主体复制并粘贴到函数调用的位置,就会看到它起作用。

您可以通过修改参数引用的对象而不是参数本身来解决此问题:

def swap0(s1, s2):
    assert type(s1) == list and type(s2) == list
    tmp = s1[:]
    s1[:] = s2
    s2[:] = tmp

但是,在Python中进行交换的更简便更好的方法是:

s1, s2 = s2, s1

这也将只交换那些对列表的特定引用,而不交换列表内容本身。



 类似资料:
  • 问题内容: 我想将代码放在不同的类中,并将它们放入不同的文件中。但是这些类是相互依赖的。 main.py: lib / _ 初始化 _.py: lib / a.py: lib / b.py: 是否可以在Python中做到这一点? 编辑: 我收到此错误消息: 问题答案: 您可以在hello函数中导入其他模块,而不必在顶部导入模块。

  • 本文向大家介绍js简单实现网页换肤功能,包括了js简单实现网页换肤功能的使用技巧和注意事项,需要的朋友参考一下 我发现网上写换肤功能写的有点长,就想想如何更简单方法实现这个功能,于是我自己写了一个。 html css文件 default.css red.css green.css  PS:当然设置主题的参数也可以保存到后端(推荐),防止禁用cookies主题无法生效。 以上就是本文的全部内容,希望

  • 本文向大家介绍简单实现python收发邮件功能,包括了简单实现python收发邮件功能的使用技巧和注意事项,需要的朋友参考一下 今天记录一下如何使用python收发邮件,知识要点在python内置的poplib和stmplib模块的使用上。 1. 准备工作 首先,我们需要有一个测试邮箱,我们使用新浪邮箱,而且要进行如下设置: 在新浪邮箱首页的右上角找到设置->更多设置,然后在左边选择“客户端/po

  • 本文向大家介绍Python 实现简单的电话本功能,包括了Python 实现简单的电话本功能的使用技巧和注意事项,需要的朋友参考一下 myPhoneBook2.py 花了一个下午和半个晚上写了这个简单通讯录: 哈哈,第一次写这么长的Python代码,自认为结构还是挺合理的。 代码如下:

  • 本文向大家介绍python实现简单爬虫功能的示例,包括了python实现简单爬虫功能的示例的使用技巧和注意事项,需要的朋友参考一下 在我们日常上网浏览网页的时候,经常会看到一些好看的图片,我们就希望把这些图片保存下载,或者用户用来做桌面壁纸,或者用来做设计的素材。 我们最常规的做法就是通过鼠标右键,选择另存为。但有些图片鼠标右键的时候并没有另存为选项,还有办法就通过就是通过截图工具截取下来,但这样

  • 问题内容: 我正在学习AngularJs的学习过程,发现几乎没有任何示例可用于现实世界。 我试图对如何使用最标准的组件提交表单并将其传递给PHP文件有一个清晰的了解。 我的小提琴。 有人在提交简单,无污染的表单方面有什么好的例子吗,这些表单会对我以及其他许多Angularjs初学者有所帮助。 当我说一个干净的表格时,我指的是这样的东西。 我的ng-app代码… 我猜我接下来要问的三个问题是… 我的