Fix mutable default argument anti-pattern for Random objects #4433
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
For the previous release (commit), I noticed that many of the test files were different. I found that we were using
rng=Random(...)
in function declarations which will not work like we want. The core issue is that default arguments are evaluated once when the function is defined, not each time it's called. So when we userng=Random(...)
in a function declaration, that sameRandom
object instance gets shared across all function calls, accumulating state changes. For reference, see Mutable Default Arguments.I tested this by running the following multiple times, confirming that the hash was the same each time:
To be clear, the next release's diff will be large, but the next next release's diff will be small 😄