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

Python引用如何工作?

拓拔弘扬
2023-03-14
问题内容

我对Python引用感到困惑。考虑以下示例

我的任务: 编辑列表中的每个元素

d = { 'm': [1,2,3] }
m = d['m']
m = m[1:]   # m changes its reference to the new sliced list, edits m but not d (I wanted to change d)

类似地:

d = { 'm': [1,2,3] }
m = d['m']
m = m[0]    # As per python referencing, m should be pointing to d['m'] and should have edited d

在python中,所有内容都按引用进行操作,那么何时创建新对象?我们总是需要copydeepcopycopy模块,使对象副本?

请说清楚。


问题答案:

在Python中,变量不是容纳事物​​的盒子,它是指向对象的名称。在您的代码中:

  • d = { 'm': [1,2,3] } ->将名称绑定d到字典
  • m = d['m']->将名称绑定m到列表
  • m = m[1:]->将名称绑定m到另一个列表

您的第三行不是在改变m自己,而是m在指向什么。

要编辑列表中的元素,您可以做的是:

m = d['m']
for i, item in enumerate(m):
    result = do_something_with(item)
    m[i] = result


 类似资料:
  • 问题内容: 应该如何更改此函数以返回? 更新:大家,问题是关于了解多行注释时如何没有\ t或其他内容,而不是如何使用该模块。 问题答案: 当您不需要多余的空格,制表符和换行符时,请不要使用三引号引起来的字符串。 使用隐式延续,它更优雅:

  • 问题内容: 两者都是具有相同签名的实例方法。为什么一个起作用而另一个不起作用? 签名: 问题答案: 引用方法有3种构造: 该行: 使用3’rd结构- 。在这种情况下, 第一个参数成为该方法的目标 。此构造等效于(翻译)以下Lambda: 这Lambda表达式工作,因为拉姆达 得到的参数,并返回结果-所要求的接口。 该行: 转换为: 哪个不适用于该界面。您可以更改为: 此更改后将进行编译。

  • 问题内容: 我对MySQL索引的工作方式非常感兴趣,更具体地说,它们如何在不扫描整个表的情况下返回请求的数据? 我知道这是题外话,但是如果有人可以向我详细解释一下,我将非常非常感谢。 问题答案: 基本上,表上的索引的作用类似于书中的索引(这就是名称的来源): 假设您有一本关于数据库的书,并且想要查找有关存储的信息。没有索引(假设没有其他帮助,例如目录),则必须逐个浏览页面,直到找到主题(即)为止。

  • 问题内容: 我已经阅读了python文档中的示例,但仍然无法弄清楚此方法的含义。有人可以帮忙吗?这是python文档中的两个示例 和 参数和目的是什么? 问题答案: 通常,如果你尝试使用字典中当前不存在的键来获取项,则字典会抛出 。该相反只会创建你尝试访问的任何物品(当然前提是他们还不存在)。为了创建这样的“默认”项目,它调用传递给构造函数的函数对象(更确切地说,它是一个任意的“可调用”对象,其中

  • 问题内容: 我无法理解该方法的行为。 如果执行,则返回True。理想情况下,它不是以空字符串开头。 该文档指出: 返回如果字符串以前缀,否则返回。也可以是要查找的前缀的元组。 那么该功能如何工作? 问题答案: 可以用Python代码表示为: 它测试源字符串的第一个字符是否等于前缀。如果传入长度为零的前缀,则表示将测试前0个字符。长度为0的字符串始终等于任何其他长度为0的字符串。 请注意,这也适用于

  • 问题内容: 我正在玩耍并浏览文档,并且遇到了一些魔术。即我正在谈论: 它们如何在内部实现您能够将类似的东西传递给方法的功能?我想这与它有关,但是我正在寻找详细的解释。 问题答案: 他们如何在内部实现将x> 5之类的内容传递给方法的能力? 简短的答案是他们没有。 对numpy数组进行任何形式的逻辑运算都会返回一个布尔数组。(即,,等等都返回给定条件为true的布尔数组)。 例如 产量: 这就是为什么