tsdxg02 发表于 2021-5-1 11:13:59

关于复制字符串操作的问题

切片可以复制字符串,我这样做了,但是对复制的字符串进行for循环删除后,原本的字符串也发生相应的改变,如图所示。百思不得其姐,请各位大神指点一下{:5_104:}

wp231957 发表于 2021-5-1 11:23:03

放出文本代码莫要只发图片

suchocolate 发表于 2021-5-1 12:35:23

1.切片是浅拷贝,内层元素还是引用。推荐阅读:https://blog.csdn.net/xbinworld/article/details/104203829,https://fishc.com.cn/forum.php?mod=viewthread&tid=175072&highlight=%C7%B3%BF%BD%B1%B4
2.另外python 函数的参数传递:推荐阅读:https://www.runoob.com/python3/python3-function.html
1)不可变类型(strings,tuples,numbers):类似 C++ 的值传递,如整数、字符串、元组。如 fun(a),传递的只是 a 的值,没有影响 a 对象本身。如果在 fun(a) 内部修改 a 的值,则是新生成一个 a 的对象。
2)可变类型(list,dict):类似 C++ 的引用传递,如 列表,字典。如 fun(la),则是将 la 真正的传过去,修改后 fun 外部的 la 也会受影响。

3.程序改成深拷贝:
import copy

def printTable(a):
    test = []
    c = copy.deepcopy(a)
    for i in c:
      while len(i) > 1:
            if i < i[-1]:
                del i
            else:
                del i[-1]
      test.append(len(i))
    print(a)
    print(c)


tab = [['apples', 'oranges', 'cherries', 'banana'],
       ['alice', 'bob', 'carol', 'david'],
       ['dogs', 'cats', 'moose', 'goose']]
printTable(tab)

柿子饼同学 发表于 2021-5-1 12:41:16

>>> a = '123'
>>> import copy as c
>>> b = c.deepcopy(a)
这样试试

lingehhhc666 发表于 2021-5-1 14:20:22

{:10_249:}{:10_249:}{:10_249:}{:10_249:}{:10_249:}{:10_266:}

tsdxg02 发表于 2021-5-2 12:20:13

wp231957 发表于 2021-5-1 11:23
放出文本代码莫要只发图片

第一次咨询,没啥经验对不起- -
感谢回复!

tsdxg02 发表于 2021-5-2 12:20:44

柿子饼同学 发表于 2021-5-1 12:41
这样试试

等下试试,谢谢!

tsdxg02 发表于 2021-5-2 12:21:31

suchocolate 发表于 2021-5-1 12:35
1.切片是浅拷贝,内层元素还是引用。推荐阅读:https://blog.csdn.net/xbinworld/article/details/10420382 ...

谢谢解答!
页: [1]
查看完整版本: 关于复制字符串操作的问题