The less you reuse names the easier it is to find things by name. In Python you can use the same name for a module variable and a function variable, but there will always be a moment of hesitation when looking at the function. Did I mean to create a new variable in this scope, or did I want to use the global/module scope variable. If you give them different names that hesitation evaporates.
There is no hesitation using the same name for global/module variables and function arguments, but it does make it more difficult to search for all occurrences of the global/module variable. If I search for all occurrences of array, some of the hits will be for the global variable and some for the function argument. This doesn't cause any confusion or much trouble for your little example, but what if your module was hundreds of lines long and you reuse "array" as a variable name indiscriminately? Sure, you can depend on you tools to help straighten things out, but why? Why not pick a naming convention now that eliminates the problem?
The linting tool I use would complain about a global variable named "array", recommending "ARRAY" instead. I think "array" is a bad name for a global variable. Fine for a local variable or a function argument, but not informative for a global variable. Does it have some important purpose? A more descriptive name might let me read the code without having to resort to finding where you did (or did not) accurately document the purpose of this variable. If it is of no purpose at all, a better name can help with that too. How about "test_array" or "temp_array" or not even making a variable and passing the list directly.
print( "sum is " + str(my_sum([1, 2, 3, 4])) )