I can think of 2 ways of dealing with this; the first one is having an array of textures and switching between them, the second one is having just 1 texture containing multiple sprites.
[Array/Dictionary]
One way is to load all the textures you need when your program starts (or when you load a specific scene), then when you need to change the texture for a specific sprite just call the setTexture method with the new texture as a parameter. In this way your program won't have to access the HDD to load stuff.
[Sprite atlas]
Another way is to construct a sprite atlas. A sprite atlas is a pretty big image file that contains all the sprites you need. Then you can call the setTetureRect method of your sprite to change what part of the image it will use when drawn. While it's much easier to do this when all your sprites are the same size, it is 100% possible to do this with sprites that have different sizes.
Alongside with your atlas.png you will need a file that tells your program the texture rect of each sprite you want to use. You can hardcode this but I recommend not to because it's easier to debug and add new stuff later on like this.
Here's a sprite atlas I randomly found on the internet. As you can see it has sprites of all sizes.
There are also programs that input individual image files and generate an optimal atlas (and also output all texture rects)